Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > C# จะเรียกใช้ method ในโค้ด ขณะ รันโปรแกรมยังไง ครับ



 

C# จะเรียกใช้ method ในโค้ด ขณะ รันโปรแกรมยังไง ครับ

 



Topic : 135555



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook



1111

รันโปรแกรมมา แล้ว ใส่ชื่อ method ที่ต้องการ แล้วกดรัน ครับ

555

ไม่ทราบว่าต้องเขียนโค้ดยังไง ครับ



Tag : .NET, Win (Windows App), C#, VS 2017 (.NET 4.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2020-09-17 21:32:09 By : lamaka.tor View : 2144 Reply : 35
 

 

No. 1



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ต้องการแบบนี้หรือครับ
https://stackoverflow.com/questions/53844/how-can-i-evaluate-a-c-sharp-expression-dynamically

ผมก็ชอบทำเรื่องง่ายเป็นเรื่องยาก เป็นงานอดิเรก

เอาแบบนี้ดีไหม ตรง input เปลี่ยนจาก TextBox มาเป็น ComboBox
แล้วเข้าเงื่อนไขด้วย if-else หรือ switch ตาม item ที่เลือก
แล้วรันแบบวิธีธรรมดาทั่วไปคือสร้างออปเจ็ก x y = new x();
และเรียก method ผ่าน object เลย y.method1(); y.methodN();






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-17 22:14:23 By : PhrayaDev
 


 

No. 2



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

จากที่ลองรันจากโค้ด
Code (C#)
 private void button1_Click(object sender, EventArgs e)
        {
              Test_1();
        }


รันได้แบบนี้ครับ
66

แต่ถ้า
Code (C#)
 private void button1_Click(object sender, EventArgs e)
        {
             frmHtmlAgilityPack p = new frmHtmlAgilityPack();
             Type t = p.GetType();
             MethodInfo mi = t.GetMethod(textBox1.Text, BindingFlags.NonPublic | BindingFlags.Instance);
             mi.Invoke(p, null);
    
        }

จะมาแค่
77

ไม่รันต่อ ครับ

จากที่ ดีบักมันก็มาถึงบันทัดสุดท้ายนะครับ
แต่ richTextBox ไม่โชว์อะไร

13
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-17 22:30:41 By : lamaka.tor
 

 

No. 3



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 1 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-17 22:14:23
รายละเอียดของการตอบ ::
ผมจะเอาแค่ ชื่อ method มาพิมพ์ และ รัน ครับ
พอดี method ผมเยอะมากกกกกกก และ เพิ่ม อีกเรื่อยๆ
เลยคิดว่าการทดสอบ โดยการพิมพ์ชื่อ method และ รัน น่าจะเหมาะ ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-17 22:36:50 By : lamaka.tor
 


 

No. 4



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

จากที่ใช้

Code (C#)
MessageBox.Show(HttpUtility.HtmlDecode(strFormLabel));


ได้ผล แบบนี้ครับ

888
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-17 22:44:57 By : lamaka.tor
 


 

No. 5

Guest


อยากได้ค่า ต้องคืนค่า เพราะมันมองไม่เห็น เพราะว่าตัวมันเองไม่มีค่า ไม่รับรู้เรื่องภายนอก
ถ้าเข้าใจ oop ก็บรรลุ ว่าแต่ มันก็มี test ให้ทดลองในตัวมันเองอยู่นะ คุณ tor เก่งอยู่แล้วคงเข้าใจ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-18 11:51:14 By : บัญดิษฐ
 


 

No. 6



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตอบความคิดเห็นที่ : 3 เขียนโดย : lamaka.tor เมื่อวันที่ 2020-09-17 22:36:50
รายละเอียดของการตอบ ::
JSON ถึงไหนแล้วครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-18 15:35:37 By : PhrayaDev
 


 

No. 7



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 6 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-18 15:35:37
รายละเอียดของการตอบ ::
ช่วงนี้ หัด HtmlAgilityPack จากเว็บ
https://html-agility-pack.net/online-examples

อยู่ครับ ตัวอย่างมีเป็นพัน นี่ผมยังลองได้ไม่ถึง 500 ตัวอย่างเลยครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-18 17:20:51 By : lamaka.tor
 


 

No. 8



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตอนนี้รัน method ได้หรือยังครับ
ถ้ายังมีทางเลือกดังนี้

1. เข้าเงื่อนไขตามที่ผมบอก

Code (C#)
if (textBox1.Text == "Test_1") {
  Test_1();
} else if  (textBox1.Text == "Test_N") {
  Test_N();
} else {
  MessageBox.Show("ไม่มีเมธอดนี้ในคลาส!");
}

// หรือ

switch(textBox1.Text) 
{
  case "Test_1":
    Test_1();
    break;
  case "Test_N":
    Test_N();
    break;
  default:
    MessageBox.Show("ไม่มีเมธอดนี้ในคลาส!");
    break;
}



2. ใช้เทคนิค Reflections (ที่คุณกำลังทำอยู่)

จาก No.2, 4 จะสังเกตว่าเมธอดที่จะรันไม่ได้ใส่ Access Modifier ดังนั้น C# จะใส่ค่า default ให้ซึ่งก็คือ private
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/accessibility-levels

(จากการทดสอบ)
เมื่อใช้เมธอด Method​Base.​Invoke กับ Type.​Get​Method ด้วย GetMethod(String, BindingFlags) overload
ที่มี flag เป็น NonPublic มันจะไม่คืนค่า private/protected แต่ทำงานถ้า flag เป็น internal เพราะฉะนั้น

แก้ method modifier ใน class เป็นแบบนี้

Code (C#)
class x
{
  internal void Test_1()
  {
    // ...method code...
  }
}



หรือใส่เป็น public โดยใช้ GetMethod(String) overload...โค้ด No.2 แก้เป็น

Code (C#)
private void button1_Click(object sender, EventArgs e)
       {
            frmHtmlAgilityPack p = new frmHtmlAgilityPack();
            Type t = p.GetType();
            MethodInfo mi = t.GetMethod(textBox1.Text);
            mi.Invoke(p, null);
       }


ใน class

Code (C#)
class x
{
  public void Test_1()
  {
    // ...method code...
  }
}



3. หา library เพื่อ evaluate C# script
https://stackoverflow.com/questions/53844/how-can-i-evaluate-a-c-sharp-expression-dynamically
(ดูคำตอบของ cdiggins)




สำหรับ Html Agility Pack...ไม่ต้องไปลองหมดทุกตัวอย่างก็ได้ครับ แค่ทำความเข้าใจตาม Documents และคอนเซปต์ของ XPath ก็พอ
https://html-agility-pack.net/documentation
https://www.w3schools.com/xml/xpath_intro.asp
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-21 15:03:19 By : PhrayaDev
 


 

No. 9



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

จากโค้ดนี้

111

จะไม่สะดวก ครับ

เพราะว่าถ้าหากเราเพิ่ม method อีก เราก็ต้องมาเพิ่ม ข้อมูลในโค้ดนี้ เรื่อยๆ
ถ้าเรามี 1000 method เราก็ต้องเพิ่มมาอีก 1000 รอบ ใช่ไม๊ ครับ

แต่ความคิดผมคือ อยากจะรับ ชื่อ method แล้วมารัน method ได้เลย ครับ

ซึ่งจาก No. 4 ไม่แน่ใจว่าจะเรียกได้ไม๊ ว่า มันรัน method ได้แล้วครับ
เพียง แต่ ตัว richTextBox มันไม่ยอมรัน ครับ
ไม่รู้ว่า มันจะรันแค่ console อย่างเดียวไม๊
ไม่รัน control ด้วย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-21 20:43:54 By : lamaka.tor
 


 

No. 10



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

Quote:
จะไม่สะดวก ครับ

เพราะว่าถ้าหากเราเพิ่ม method อีก เราก็ต้องมาเพิ่ม ข้อมูลในโค้ดนี้ เรื่อยๆ
ถ้าเรามี 1000 method เราก็ต้องเพิ่มมาอีก 1000 รอบ ใช่ไม๊ ครับ


method มีโค้ดตั้งเยอะแถมไม่ซ้ำด้วย ยังคัดลอกวางได้ ...แค่คัดลอก else if หรือ switch case มาต่อเพิ่มและเปลี่ยนชื่อคงไม่เกินพยายามมั้งครับ ที่ผมแนะนำวิธีนี้มาก่อนวิธีอื่นเพราะเป็นวิถีของ .NET native(OOP) ตาม No.5 บอกไว้...ซึ่ง Tools ที่ใช้ก็พวก text editor อย่าง Notepad++ etc. มี RegEx ให้เขียนเพิ่มได้ หรือ VS อาจมี...แต่ไม่แน่ใจ

แต่ถ้าขี้เกียจเพิ่มจริงๆ ไป Reflection/evaluate ครับ

Quote:
ซึ่งจาก No. 4 ไม่แน่ใจว่าจะเรียกได้ไม๊ ว่า มันรัน method ได้แล้วครับ
เพียง แต่ ตัว richTextBox มันไม่ยอมรัน ครับ
ไม่รู้ว่า มันจะรันแค่ console อย่างเดียวไม๊
ไม่รัน control ด้วย


richTextBox ไม่ได้ลอง ผมลองกับ console app แต่คิดว่าน่าจะได้
เพราะผมลองไม่ใส่ Access Modifier มันจะขึ้น error(จำไม่ได้แล้ว)

หมายเหตุ ทดสอบกับ .NET Framework 4.7.2

ยังไงลองใส่ Modifier ดูครับว่าผลจะเป็นยังไง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-21 21:37:39 By : PhrayaDev
 


 

No. 11



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ถ้าเลือกการเข้าเงื่อนไข...มีอีกวิธีที่ง่ายและเร็ว คือ เขียนโปรแกรม generate ซอสโค้ด
https://dotnetfiddle.net/JVOEM9

ส่วนอันนี้คือการตั้ง modifier เป็น public (reflection)
https://dotnetfiddle.net/V8CRhC



ลองดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-21 23:55:34 By : PhrayaDev
 


 

No. 12



โพสกระทู้ ( 9,554 )
บทความ ( 2 )



สถานะออฟไลน์


ศึกษาคห 1 อันนั้นตรงที่สุดแล้ว Evaluation
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 07:52:28 By : Chaidhanan
 


 

No. 13



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 12 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-09-22 07:52:28
รายละเอียดของการตอบ ::
ผมตอบไปใน No. 3 แล้วครับท่าน
มันไม่ตรงกับที่ต้องการครับ

ถ้าทำแบบนั้น แสดงว่า เราก็ต้องมานั่ง เขียนเป็น string ทั้งหมด ทั้ง 1000 กว่า เมทธอด
แล้วมันก็ไม่สามารถ รันแบบเรียก เมทธอด ผ่าน evrnt ได้ เราก็ต้องมานั่งเขียน ยาวพรืดดดดดด ทั้ง ยวง เลยครับ

เมทธอดหนึ่ง เราก็ต้องเขียน namespace class method เรื่อย
ถ้ามี 1000 กว่า เราก็ต้องก๊อบ รูปแบบนี้ มา 1000 กว่ารอบ ซึ่ง มันเสียเวลากว่าที่เรา เขียนแบบปกติมากครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 09:36:09 By : lamaka.tor
 


 

No. 14



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

สรุป ตอนนี้ ในส่วนของการเอาชื่อ method ไปรัน นั้นเรียบร้อยดีไม่มีปัญหาครับ

ผมใช้โค้ดนี้ครับ

465

เพียงแค่ตอนนี้ ยังใช้งาน richTextBox1 ไม่ได้ตามรูป ครับ

456

จากรูป คือ มันรันมาถึง

Code (C#)
 MessageBox.Show(HttpUtility.HtmlDecode(strFormLabel));


แต่มันไม่มีค่า
Code (C#)
  richTextBox1.WriteLine(btest);
  richTextBox1.WriteLine(HttpUtility.HtmlDecode(strFormLabel));


เหมือนมันเมินกันเอาดื้อแบบนั้นเลยครับ
ถ้า ดีบักที่ บรรทัดนั้น จะได้แบบนี้ ครับ

467


ประวัติการแก้ไข
2020-09-22 09:54:48
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 09:47:28 By : lamaka.tor
 


 

No. 15



โพสกระทู้ ( 9,554 )
บทความ ( 2 )



สถานะออฟไลน์


ลองอ่านดู ไม่น่าจะต้องเขียนเยอะ
https://www.codeproject.com/Articles/13779/The-expression-evaluator-revisited-Eval-function-i
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 10:30:37 By : Chaidhanan
 


 

No. 16



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 15 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-09-22 10:30:37
รายละเอียดของการตอบ ::
ขอบคุณมากครับ
ขอลองโค้ดซักครู่ นะครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 10:43:47 By : lamaka.tor
 


 

No. 17



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 15 เขียนโดย : Chaidhanan เมื่อวันที่ 2020-09-22 10:30:37
รายละเอียดของการตอบ ::
จากที่ลองแล้วไม่ใช่ครับ
มันเป็นแค่การเอา string ไปรัน แค่นั้นเองครับ
ไม่ใช่การเรียกใช้ เมทธอด ที่มีอยู่ ครับ

ส่วนตัว TextBox ก็อยู่นอก เมทธอด ที่เรียกใช้ มันจึงทำงานได้ปกติครับ
แต่ของผม richTextBox1 อยู่ในเมทธอด ที่เรียกใช้ ครับ
ถ้าเอามาไว้ข้างนอกก็ทำงานปกติ เช่นกัน ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 10:58:25 By : lamaka.tor
 


 

No. 18



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ล่าสุดลองแบบนี้

546

richTextBox1 ก็ ไม่มีอะไรเหมือนเดิม
มาแค่
Code (C#)
MessageBox.Show(HttpUtility.HtmlDecode(strFormLabel)); 

ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 11:15:28 By : lamaka.tor
 


 

No. 19



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ส่งไฟล์โปรเจคมาครับ ผมจะแก้ให้ดู แค่ใส่ public
(เว้นแต่มีสิ่งที่เหนือความคาดหมาย)



ส่วนการ evaluation ตรงตามที่พี่ต่อต้องการแล้วครับ แต่ผมวางไว้สุดท้ายเพราะ
ตัวแปลง source code เป็น binary ไฟล์ของ .NET จะเป็น compiler ไม่ใช้ interpreter
ดังนั้น การ evaluate เหมือน php จึงเป็นไปไม่ได้ เนื่องจากมันกลายเป็น CLI->Assembly แล้ว
การ evaluate ตามลิงค์ SO ที่ให้ไป จึงต้องพึง compiler และจะมีการ build ทุกครั้งที่เรียก method

แต่ข้อดีของมันคือสามารถเรียกแบบนี้ได้

Code (C#)
x y = new x();
eval("y." + "MethodName" + "();"); // สามารถเรียกเมธอดด้วย string ได้


ในขณะที่ run-time(source code ถูก compiled แล้ว) ไม่สามารถเรียกชื่อ method โดยตรงได้
ต้องทำ reflection เพื่อเจาะ binary file(exe) ดึงข้อมูลแบบ Assembly ผ่าน .Net CLI(เหมือนโหลด .dll แค่ invoke ตัวมันเอง)


ประวัติการแก้ไข
2020-09-22 12:10:42
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 12:09:01 By : PhrayaDev
 


 

No. 20



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

แต่ผมยังสงสัยอยู่อย่างว่า ถ้าต้องการศึกษาให้เข้าใจ จะคัดลอกโค้ดมาตุนไว้ทำไม
วิชาการพวกนี้ไม่เน้นจำจะไปเร็วกว่า ไม่ใช่ Anatomy ของการแพทย์ที่ต้องท่องจำ
ประกอบกับการทำความเข้าใจ เพราะมันเกี่ยวข้องกับชีวิตมนุษย์

แต่ถ้าตุนไว้เพราะอยากสะสม ก็ว่าไปอย่าง เพราะผมก็ชอบโหลดหนังพวกซีรีส์หรือละครมาสะสมไว้
...แต่อย่าลืมว่า เทคโนโลยี มันเปลี่ยนแปลงทุกๆ x ช่วงเวลา

การเขียนโปรแกรม ตราบใดที่เรายังต้องพึ่งเครื่องมือในการพัฒนาของคนอื่น
เราต้องปรับตัวให้เข้ากับสภาพแวดล้อม และทรัพยากรสังเคราะห์เหล่านี้
แต่ถ้าอยากให้สิ่งเหล่านี้ปรับเข้าหาเรา...ต้องคิดค้นขึ้นมาเอง อย่าไปใช้เลย .NET
เพราะไม่มีวันที่มันจะทำได้ดั่งใจเราไปทุกอย่าง



อย่าคิดมากครับ ถือว่าเป็นคำแนะนำและความหวังดี
อะไรที่เราทำแล้วมีความสุขก็ทำๆ ไปเถอะครับ...ได้ไม่ได้ก็ว่ากันไปตามเรื่อง

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 12:26:22 By : PhrayaDev
 


 

No. 21



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ถ้าผมเจอ ความรู้ใหม่ๆ ผมก็มักจะเก็บโค้ดไว้ ครับ เผื่อ จะได้เอาไปดัดแปลงรอบหน้า เราก็จะได้รู้ ที่มา ที่ไป
แต่ก่อน เคย มีปัญหาว่า เวลาจะศึกษาอะไรที ต้องมาค้นหาใหม่เรื่อยๆ

ผมจึงแยก โปรเจค บางส่วนมาไว้ เก็บโค้ด ต่างๆ ไว้นั่งศึกษาคราวหลัง ครับ

ซึ่ง ย้ำอีกครั้งนะครับ ว่าตอนนี้ โค้ดในการรันไม่มีปัญหา มันสามารถ อ่าน เมทธอด ที่ส่งไปให้ได้ ปกติแล้ว ครับ
เพียงแค่ติดอยู่ว่า เวลาเรียกผ่าน run-time ตัว richTextBox1 ก็ ไม่มีอะไร มันไม่ตอบรับ ครับ

ส่วน link โปรเจค เป็นตัวนี้ ครับ(อาจจะใหญ่หน่อยนะครับ)
https://mega.nz/folder/4JIxnIyY#8Ge_AV3C5Rq_u4tBKZRSaw


ประวัติการแก้ไข
2020-09-22 13:58:20
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 13:56:23 By : lamaka.tor
 


 

No. 22



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

เอามาหมดเลย...อยู่ในโฟลเดอร์ไหนครับ โปรเจคเรียก method
หรือจะให้ทำในตัวใหญ่เลย เยอะไปไหม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 14:14:58 By : PhrayaDev
 


 

No. 23



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 22 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-22 14:14:58
รายละเอียดของการตอบ ::
ตัวโปรเจคเจ้าปัญหาจะอยู่ใน

Code (SQL)
C_Sharp_tutorial_by_TOR\TestProjectByWeb\dotnetfiddle.net\dotnetfiddle.net.csproj


ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 14:18:28 By : lamaka.tor
 


 

No. 24



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

กำลังดาวน์ครับ MEGA ไม่ได้ใช้นานหลายปี โหลดช้ามากกกก

DL_Status
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 14:34:10 By : PhrayaDev
 


 

No. 25



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 24 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-22 14:34:10
รายละเอียดของการตอบ ::
mega ผมเอาไว้ ทำโน่น นี่น นั่น แจกไปเรื่อย ครับ มันได้เยอะดี(50G)
ตัวโค้ดอาจจะไม่เยอะ แต่พอรวมกับพวก เพคเกจ ต่างๆ ก็เยอะเหมือนกันครับ

ตอนนี้ เขียนโค้ดโหลด โค้ด ของ github และ codeproject เรียบร้อย แต่ยังไม่ได้ ลองโหลดดูครับ
ของ github เคยโหลดพวก WPF มาดูได้เกือบๆ 15 G เลย เก็บไว้ก่อน ยังไม่โหลดอย่างอื่น ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 14:53:20 By : lamaka.tor
 


 

No. 26



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

เปิด project ยังไม่ได้ครับ กำลังหาวิธีอยู่
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 15:30:32 By : PhrayaDev
 


 

No. 27



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 26 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-22 15:30:32
รายละเอียดของการตอบ ::
ไม่ทราบว่าเปิดได้ยังครับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 16:40:35 By : lamaka.tor
 


 

No. 28



โพสกระทู้ ( 9,554 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 21 เขียนโดย : lamaka.tor เมื่อวันที่ 2020-09-22 13:56:23
รายละเอียดของการตอบ ::
จาก NO 21 เคยทำเหมือนกัน แต่ version อัพเกรดบ่อยเกิน มันไปเร็วมาก เก็บได้ไม่นานก็ต้องลบ ทิ้งไม่ได้ใช้


นี่ 3 ปีที่แล้ว เก็บโปรแกรม ที่เขียน ด้วย boostrap 2 เอาไว้ ตอนนี้ใช้ 4

และที่สำคัญ ค้นจากเวป ง่ายกว่าเยอะเลย ไม่ต้องจำ ว่าอยู่ตรงไหน 55555

เก็บแค่โค๊ดใกล้ต้ว ที่กำลังเขียนและอยู่ในช่วย mentainance ที่เหลือว่างๆ ก็มาเคลียร์ที
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 17:11:30 By : Chaidhanan
 


 

No. 29



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ผมยอมแพ้ครับ ของแถมเยอะ(จริงๆ มันคือ NuGet package+dependencies ที่ไม่ support ระหว่าง version)

Quote:
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is ..\..\packages\Microsoft.CodeAnalysis.Analyzers.3.0.0\build\Microsoft.CodeAnalysis.Analyzers.props.


เราอาจใช้ไม่เหมือนกัน (ของผม VS2017)

ผมยังไม่มีเวลาพอ(...เป็นข้ออ้างเพราะขี้เกียจไล่แก้และต่อไปอาจลืม )
เลยสร้างโปรเจคใหม่แล้วคัดลอก Component กับซอสโค้ด และใส่ event
และนี่คือซอสโค้ดแบบ clean

frmHtmlAgilityPack.Designer.cs (C#)
namespace dotnetfiddle
{
    partial class frmHtmlAgilityPack
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
            this.panel1 = new System.Windows.Forms.Panel();
            this.button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.panel1.SuspendLayout();
            this.SuspendLayout();
            // 
            // richTextBox1
            // 
            this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.richTextBox1.Location = new System.Drawing.Point(0, 62);
            this.richTextBox1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.richTextBox1.Name = "richTextBox1";
            this.richTextBox1.Size = new System.Drawing.Size(687, 242);
            this.richTextBox1.TabIndex = 0;
            this.richTextBox1.Text = "";
            // 
            // panel1
            // 
            this.panel1.Controls.Add(this.button1);
            this.panel1.Controls.Add(this.textBox1);
            this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
            this.panel1.Location = new System.Drawing.Point(0, 0);
            this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(687, 62);
            this.panel1.TabIndex = 1;
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(451, 16);
            this.button1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(100, 28);
            this.button1.TabIndex = 1;
            this.button1.Text = "Run";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(17, 16);
            this.textBox1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(407, 22);
            this.textBox1.TabIndex = 0;
            // 
            // frmHtmlAgilityPack
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(687, 304);
            this.Controls.Add(this.richTextBox1);
            this.Controls.Add(this.panel1);
            this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
            this.Name = "frmHtmlAgilityPack";
            this.Text = "frmHtmlAgilityPack";
            this.Load += new System.EventHandler(this.frmHtmlAgilityPack_Load);
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            this.ResumeLayout(false);

        }

        #endregion
        private System.Windows.Forms.Panel panel1;
        public System.Windows.Forms.RichTextBox richTextBox1;
        public System.Windows.Forms.Button button1;
        public System.Windows.Forms.TextBox textBox1;
    }
}



และปัญหาที่ตามมาอีกคือตาม Add references แต่โชคดีมีแค่สองสามอัน
ต่อมาก็เจอเรื่องแปลกประหลาด(เนื่องจากผมไม่ได้ใช้ richTextBox นานมาก...เอ๊ะหรือไม่เคยเลย)
มาตกม้าอยู่นานเพราะ richTextBox ที่ผมใช้อยู่ไม่มี WriteLine method
เลยว๊าปเข้าไปดู Docs รู้ว่าไม่มีจริง...ผมเลยใช้เมธอด built-in แทน (AppendText)

นั่งงมไปตามความเชื่อของตัวเอง
...
และแล้วข่าวดีก็มาถึง ...รู้ต้นตอแล้วครับ
ไม่เกี่ยวกับ Access Modifier อย่างที่ผมเข้าใจตั้งแต่ทีแรก(ที่ตอบไปเพราะอ้างอิงตาม DotNetFilddle)
สรุปคือไม่ว่าจะเป็น Public/NonPublic โดยเฉพาะ private ที่สงสัย เรียกได้หมด
แต่กุญแจสำคัญคือ Parameter ที่ส่งไป invoke
โดยธรรมชาติ Control จะไม่ถูกส่งไปด้วย...แปลว่าตอน invoke มันไม่มี richTextBox
ที่เราเห็นข้อความ True บรรทัดแรกเกิดจากที่ AppendText เข้าไปก่อนที่จะทำการ invoke
ดังนั้น วิธีแก้คือเราต้องแนบ richTextBox เป็น parameter เข้าไปด้วย(แนบได้หลาย control เพราะเป็น array)

frmHtmlAgilityPack.cs (C#)
using HtmlAgilityPack;
using System;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Web;
using System.Windows.Forms;

namespace dotnetfiddle
{
    public partial class frmHtmlAgilityPack : Form
    {
        public frmHtmlAgilityPack()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frmHtmlAgilityPack p = new frmHtmlAgilityPack();

            richTextBox1.AppendText((GetType() == typeof(frmHtmlAgilityPack)).ToString());
            Type t = GetType();

            MethodInfo mi = t.GetMethod(textBox1.Text, BindingFlags.NonPublic | BindingFlags.Instance);
            mi.Invoke(p, new object[] {richTextBox1});
        }
        void Test_1(RichTextBox rtxt1)
        {
            var html = "<html dir=\"ltr\">\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=utf-8\">\r\n<base href=\"http://it.hcportal.ihess.com/itpmo\"><style>\r\n<!--\r\n.headertop1\r\n\t{width:100%}\r\n.headercontent\r\n\t{color:#000000;\r\n\tfont-family:verdana;\r\n\tfont-size:16pt}\r\n.headercontent em\r\n\t{font-weight:bold}\r\n.breadcrumb td\r\n\t{padding-left:2px;\r\n\tpadding-right:2px}\r\n.breadcrumb a\r\n\t{font-family:tahoma;\r\n\tfont-size:8pt}\r\n.content\r\n\t{margin-top:6px;\r\n\twidth:100%;\r\n\tborder-bottom:solid 1px #9ca3ad}\r\n.toolbar\r\n\t{border:1px solid #e8eaec;\r\n\tbackground-color:#f8f8f9;\r\n\tpadding-top:3px;\r\n\tpadding-bottom:6px;\r\n\tpadding-right:3px;\r\n\tpadding-left:3px}\r\n.toolbarbutton a, .toolbarsep\r\n\t{font-family:verdana;\r\n\tfont-size:.68em;\r\n\tpadding-left:3px;\r\n\tpadding-right:3px}\r\n.toolbarbutton a\r\n\t{text-decoration:none}\r\n.toolbarsep\r\n\t{color:#c7cbd1}\r\n.spacer\r\n\t{height:10px;\r\n\tfont-size:1px;\r\n\tline-height:1px}\r\n.formline, .noheight\r\n\t{height:1px;\r\n\tfont-size:1px;\r\n\tline-height:1px}\r\n.formlabel, .formbody, .digestlabel, .altdigestlabel, .deletedlabel, .altdeletedlabel\r\n\t{font-family:tahoma;\r\n\tfont-size:8pt;\r\n\tpadding:0px 7px 0px 7px;\r\n\tvertical-align:top}\r\n.formlabel, .digestlabel, .altdigestlabel, .deletedlabel, .altdeletedlabel\r\n\t{color:#616a76;\r\n\tfont-weight:bold}\r\n.rulerow\r\n\t{border-bottom:solid 1px #9ca3ad;\r\n\theight:0px;\r\n\tfont-size:1px;\r\n\tline-height:0px}\r\n.formbody\r\n\t{color:#000000}\r\n.edited\r\n\t{text-decoration:line-through;\r\n\tcolor:#9ca3ad}\r\n.descriptiontext\r\n\t{color:#9ca3ad;\r\n\tfont-family:tahoma;\r\n\tfont-size:8pt;\r\n\tpadding-top:5px;\r\n\tpadding-bottom:7px}\r\n.formline\r\n\t{border-bottom:1px solid #D7DEAC}\r\n.editedicon, .newicon, .deletedicon\r\n\t{color:#000000;\r\n\tfont-family:Small Fonts,Tahoma,Verdana,Sans Serif;\r\n\tfont-size:7pt;\r\n\tpadding-top:0px;\r\n\tpadding-right:3px;\r\n\tpadding-bottom:1px;\r\n\ttop:2px;\r\n\tmargin-right:8px;\r\n\tmargin-left:8px;\r\n\tfont-weight:normal}\r\n.editedicon\r\n\t{background-color:#ffffcc}\r\n.newicon\r\n\t{background-color:#b1faa2}\r\n.deletedIcon\r\n\t{background-color:#ffcccc}\r\n.messagespace\r\n\t{color:#5D6437;\r\n\tfont-family:tahoma;\r\n\tfont-size:8pt;\r\n\tpadding-top:5px;\r\n\tpadding-bottom:7px}\r\n.editedexample\r\n\t{background:#FFFFBF;\r\n\tpadding:1px}\r\n.vh, .vb, .altvb, .deleted, .altdeleted\r\n\t{font-weight:normal;\r\n\ttext-align:left;\r\n\ttext-decoration:none;\r\n\tvertical-align:top;\r\n\tfont-size:8pt;\r\n\tfont-family:tahoma,sans-serif;\r\n\tpadding-left:5px;\r\n\tpadding-right:8px}\r\n.vb, .altvb, .deleted, .altdeleted, .digestlabel, .altdigestlabel, .formlabel, .formbody\r\n\t{border-bottom:solid 1px #e8eaec;\r\n\tpadding-top:2px;\r\n\tpadding-bottom:5px}\r\n.vb div.nobr, .altvb div.nobr\r\n\t{white-space:nowrap}\r\n.vh\r\n\t{color:#76808e;\r\n\tfont-weight:bold;\r\n\tpadding-top:7px;\r\n\tpadding-bottom:6px;\r\n\twhite-space:nowrap}\r\n.vb, .altvb\r\n\t{color:#616a76}\r\n.altvb, .altdigestlabel, .altdeleted, .altdeletedlabel, .formlabel, .formbody\r\n\t{background:#f8f8f9}\r\n.digesttext\r\n\t{color:#000000}\r\n.deleted, .deletedlabel, .altdeleted, .altdeletedlabel\r\n\t{text-decoration:line-through;\r\n\tcolor:#9ca3ad}\r\n.deleted a, .altdeleted a\r\n\t{color:#9ca3ad;\r\n\ttext-decoration:line-through}\r\n-->\r\n</style>\r\n</head>\r\n<body>\r\n<table class=\"headertop1\" cellspacing=\"0\" cellpadding=\"0\">\r\n<tbody>\r\n<tr>\r\n<td class=\"headercontent\">\r\n<table class=\"breadcrumb\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">\r\n<tbody>\r\n<tr>\r\n<td><a href=\"http://it.hcportal.ihess.com/itpmo\">IT PMO</a></td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<em>Global JV Accounting & JV Audit Team...</em> has been added </td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n<table class=\"content\" cellspacing=\"0\" cellpadding=\"0\">\r\n<tbody>\r\n<tr>\r\n<td colspan=\"3\">\r\n<table class=\"toolbar\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\">\r\n<tbody>\r\n<tr>\r\n<td>\r\n<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n<tbody>\r\n<tr>\r\n<td class=\"toolbarbutton\"><a href=\"http://it.hcportal.ihess.com/itpmo/_layouts/15/MySubs.aspx\">Modify my alert settings</a></td>\r\n<td class=\"toolbarsep\">|</td>\r\n<td class=\"toolbarbutton\"><a href=\"http://it.hcportal.ihess.com/itpmo/Lists/IT Project Portfolio/DispForm.aspx?ID=1546\">View Global JV Accounting & JV Audit Team...</a></td>\r\n<td class=\"toolbarsep\">|</td>\r\n<td class=\"toolbarbutton\"><a href=\"http://it.hcportal.ihess.com/itpmo/Lists/IT Project Portfolio\">View Work Capture List</a></td>\r\n<td class=\"toolbarsep\">|</td>\r\n<td class=\"toolbarbutton\"><a href=\"http://it.hcportal.ihess.com/itpmo/_layouts/15/mobile/dispform.aspx?List=09DE8736-E6AF-4AB4-B452-3996693F305B&ID=1546\">Mobile View</a></td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td colspan=\"3\" class=\"spacer\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Project Name:</td>\r\n<td class=\"formbody\">Global JV Accounting & JV Audit Team Spotfire reporting needs </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Description:</td>\r\n<td class=\"formbody\">\r\n<div class=\"ExternalClassBBDFEAB759A84CB79ABCDAFE409E645F\">\r\n<p>​Need of a summary dashboard to serve as a health check report</p>\r\n</div>\r\n </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Justification:</td>\r\n<td class=\"formbody\">\r\n<div class=\"ExternalClassECA99D876FB54C11935B728DF3114AA9\">\r\n<p>enhanced user experience</p>\r\n</div>\r\n </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Priority Group:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Start Date:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">End Date:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ITLT Owner:</td>\r\n<td class=\"formbody\">Murray, Jason </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">IT Teams Involved:</td>\r\n<td class=\"formbody\">Spotfire COE </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Rough Order of Magnitude:</td>\r\n<td class=\"formbody\">Medium (161 - 500 person hours) </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Perceived Value:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Assets Impacted:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Functions Impacted:</td>\r\n<td class=\"formbody\">Other Corporate Function </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">State:</td>\r\n<td class=\"formbody\">Backlog </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Sponsored By:</td>\r\n<td class=\"formbody\">IT </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Project Sponsor:</td>\r\n<td class=\"formbody\">Larcombe, Nick </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Primary Driver:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Estimated Cost:</td>\r\n<td class=\"formbody\">< $50,000 </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Requested Date:</td>\r\n<td class=\"formbody\">3/31/2019 </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Project Submitted By:</td>\r\n<td class=\"formbody\">Pamarty, Krishna </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Technical Authority:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Supervisor:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Prioritization Forum:</td>\r\n<td class=\"formbody\">IT </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Date Constraint:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Problem Clearly Defined:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Alignment to Goal:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Stakeholders Engaged:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Readiness Score:</td>\r\n<td class=\"formbody\">0% </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Hess Standard Architecture Compatibility:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Process Impact:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Technical Complexity:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Support Capability:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Delivery Score:</td>\r\n<td class=\"formbody\">0% </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Relative Value:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Cost of Delay:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Probability of Success:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Value Score:</td>\r\n<td class=\"formbody\">0% </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Prioritization Score:</td>\r\n<td class=\"formbody\">0% </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Take Work Out Initiative:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Comments:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Priority:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">2019 IT Budget:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Enterprise-Wide Initiative:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Weekly Status Report:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Deliverables and Outcomes:</td>\r\n<td class=\"formbody\">\r\n<p>​<span aria-hidden=\"true\" id=\"ms-rterangepaste-start\"></span>SAP BI / Spotfire dashboard<span aria-hidden=\"true\" id=\"ms-rterangepaste-end\"></span></p>\r\n </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Project Duration:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Risks and Uncertanties:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Impacts:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Cost Center:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Technical Reviewer:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">IT AFE Amount:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Internal Costs:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">External Costs:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Baseline Impact:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Project Manager:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Current Status Summary:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Percent Complete:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ITLT Approval Date:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Manager Approval Date:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">IT Budget:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">IT AFE Number:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Main Department:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ITLT Review Recommended:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ExpandSection1:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ExpandSection2:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ExpandSection3:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">ExpandSection4:</td>\r\n<td class=\"formbody\">No </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Manager:</td>\r\n<td class=\"formbody\"> </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td class=\"formlabel\">Solution:</td>\r\n<td class=\"formbody\">\r\n<div class=\"ExternalClass43F67F58AF0A4A9E82DDBA6AAE24B901\">\r\n<p>​</p>\r\n</div>\r\n </td>\r\n<td class=\"altvb\"> </td>\r\n</tr>\r\n<tr>\r\n<td colspan=\"3\" class=\"descriptiontext\">Last Modified 1/29/2019 2:49 PM by Chidhambaram, Vanniarajan</td>\r\n</tr>\r\n</tbody>\r\n</table>\r\n</body>\r\n</html>";
            html = Regex.Replace(html, @"^\s*$\n", string.Empty, RegexOptions.Multiline);
            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(html);
            //var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body //table[@class='"+"content"+"']] //div[@class='"+"file_detail"+"'] //table[@class='"+"highlighttable"+"']");
            HtmlNode test = htmlDoc.DocumentNode.SelectSingleNode("//body //table[@class='" + "content" + "']");
            //HtmlNodeCollection rows =  htmlDoc.DocumentNode.SelectNodes("//body //table[@class='"+"content"+"'] //tr");

            string strFormLabel;

            //strFormLabel = test.SelectSingleNode("//tr[td[@class='"+"formlabel"+"']='Project Name:']/td[2]").InnerText;
            strFormLabel = htmlDoc.DocumentNode.SelectSingleNode("//body //table[@class='" + "headertop1" + "'] //tr[1] /td[1]").InnerText;
            bool btest = strFormLabel.Contains("has been added");

            //richTextBox1 จะใช้งานไม่ได้

            /*
              richTextBox1.WriteLine(btest);
              richTextBox1.WriteLine(HttpUtility.HtmlDecode(strFormLabel));
              richTextBox1.AppendText(HttpUtility.HtmlDecode(strFormLabel));
            */

            //...ใช้ rtxt1 ซึ่งเป็น control argument ที่เราเข้ามาแทน
            rtxt1.AppendText(HttpUtility.HtmlDecode(strFormLabel));

            //MessageBox.Show(HttpUtility.HtmlDecode(strFormLabel));
        }
        private void frmHtmlAgilityPack_Load(object sender, EventArgs e)
        {

        }
    }
}





แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 18:43:44 By : PhrayaDev
 


 

No. 30



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ลืมคืนไฟล์ครับ

VS2017's project
https://drive.google.com/file/d/1yQk6rxKW7DVZOq587lVWNBlLG7o_Zvlh/view?usp=sharing
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 19:10:52 By : PhrayaDev
 


 

No. 31



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 29 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-22 18:43:44
รายละเอียดของการตอบ ::
ขอบคุณมากๆ ครับ

WriteLine method จะอยู่ในไฟล์ textExt.cs ครับ
ผมเอาไว้รัน .Text ของ พวก control ต่างๆ เพราะ ขี้เกียจมาเขียน Invoke ทุกครั้ง ที่ใช้งาน

ขอถามเพิ่มเติมครับ(ช่างสงสัยซะเหลือเกิ๊นนนน 5555)
ทำไมผมประกาศตัวแปร แบบนี้ แล้วไม่ได้ครับ


1311

มันต่างจากการ Input object เข้าไปยังไง ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 22:13:21 By : lamaka.tor
 


 

No. 32



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

Quote:
WriteLine method จะอยู่ในไฟล์ textExt.cs ครับ

ว่าแล้วเชียว

Quote:
ขอถามเพิ่มเติมครับ(ช่างสงสัยซะเหลือเกิ๊นนนน 5555)
ทำไมผมประกาศตัวแปร แบบนี้ แล้วไม่ได้ครับ
มันต่างจากการ Input object เข้าไปยังไง ครับ


ทุกคนมีสิทธิสงสัยครับ เป็นธรรมชาติของคนที่มีความทะเยอทะยานใฝ่รู้



ผมขออธิบายพอสังเขป(ให้งงเล่นๆ )

การเรียกใช้เมธอดแบ่งเป็น เรียกตอน Compile-time กับ Run-time

เรียกตอน Compile-time คือ การเรียกใช้เมธอดตอน compile
ทุกอย่างที่ถูกนิยามขึ้นจะถูกมองเห็นตาม source code
ที่อ้างอิงจาก library, object, control... ต่างๆ
richTextBox1 เป็น Control ที่ประกาศไว้ใน Component (Design-time*)
จึงเรียกใช้งานได้เฉพาะตอน Compile-time

เรียกตอน Run-time คือ การเรียกใช้เมธอดหลังการ Compile(เรียกตอนเป็น binary file/exe)
ชื่อของ RichTextBox control ไม่ถูกตีตราออกมาเป็น string โดยตรง แต่ต้องเรียกผ่าน CLI
เป็นสะพานทอดไปยัง Method ในรูป Assembly การอ้างอิงเมธอด(Method invoke)
จึงต้องอาศัยความช่วยเหลือจาก Compile-time สะกิดบอก Run-time ว่า
ชื่อ richTextBox1 เป็น RichTextBox control ตามที่ประกาศไว้ใน Component
ด้วยวิธีการส่งเป็น object เข้าไปใน method แบบในรูป parameter

* Design-time : ก่อน compile = ยังไม่มีการเรียกหรือประมวลคำสั่ง

คำสั่งการถ่ายค่าบรรทัดนี้
Code (C#)
RichTextBox rtxt1 = richTextBox1; // = คือ ถ่ายค่าจากขวาไปซ้าย


จะสามารถ compile ผ่านเพราะได้ประกาศ richTextBox1 เป็น RichTextBox control ไว้แล้ว
จึงสามารถอ้างอิงตอน Compile-time ได้โดยตรง เมื่อมีการเรียกใช้เมธอดนี้
แต่ตอน Run-time มันไม่รู้จักว่า richTextBox1 คืออะไร อยู่ส่วนไหนของโปรแกรม
ดีไม่ดีอาจมองไม่เห็นคลาส RichTextBox ด้วยซ้ำ(ไม่แน่ใจ) คำสั่งบรรทัดนี้จึงไม่มีประโยชน์
และถูกมองข้ามไป สุดท้ายจึงไม่มีอะไรเกิดขึ้น

ท้ายสุดจึงต้องพึ่งการส่ง parameter จาก Compile-time ไปยัง Run-time(Invoking)
https://docs.microsoft.com/en-us/dotnet/api/system.reflection.methodbase.invoke?view=netcore-3.1#System_Reflection_MethodBase_Invoke_System_Object_System_Object___


หวังว่าจะพอเห็นภาพ...และไม่งงกว่าเดิม


ประวัติการแก้ไข
2020-09-23 00:15:12
2020-09-23 00:18:52
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-22 23:47:32 By : PhrayaDev
 


 

No. 33



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

อยากปีนเกลียวลองดู Dynamic type ครับ
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/using-type-dynamic
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-23 00:03:18 By : PhrayaDev
 


 

No. 34



โพสกระทู้ ( 4,436 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 32 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-09-22 23:47:32
รายละเอียดของการตอบ ::
Code
การเรียกใช้เมธอดแบ่งเป็น เรียกตอน Compile-time กับ Run-time เรียกตอน Compile-time คือ การเรียกใช้เมธอดตอน compile ทุกอย่างที่ถูกนิยามขึ้นจะถูกมองเห็นตาม source code ที่อ้างอิงจาก library, object, control... ต่างๆ richTextBox1 เป็น Control ที่ประกาศไว้ใน Component (Design-time*) จึงเรียกใช้งานได้เฉพาะตอน Compile-time


ชัดเจนเลยครับ
ขอบคุณมากๆครับ
เดี๋ยวถ้าเล่น HtmlAgilityPack จะศึกษา JSON ต่อ เทียบกันว่า แบบไหน จะอ่านค่ามาเร็วกว่ากัน ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-23 08:13:09 By : lamaka.tor
 


 

No. 35



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

HtmlAgilityPack vs JSON --> ท่านผู้ว่า vs นายอำเภอ ใครจะวิ่งเร็วกว่ากัน

เก็บสถิติ ทำ benchmark ด้วยก็ดีครับ
อยากรู้ว่าจะมีวิธีเปรียบเทียบกันอย่างไร
เพราะปกติสองอย่างนี้มักใช้งานร่วมกันมากกว่าแข่งกัน

ยังไงก็จะรอผลพิสูจน์ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-23 17:22:26 By : PhrayaDev
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : C# จะเรียกใช้ method ในโค้ด ขณะ รันโปรแกรมยังไง ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่