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 > WinApp C# ผมอยากให้ class ที่อยู่ใน class ใช้ control ของ class แม่ได้ครับ



 

WinApp C# ผมอยากให้ class ที่อยู่ใน class ใช้ control ของ class แม่ได้ครับ

 



Topic : 128650



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



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



ผมลองเขียนโค้ดประมาณนี้ครับ

Code (C#)
 public partial class frmTestTor : Form // class แรก
    {
        //เพิ่ม control ลงใน class 
        RichTextBox txt = new  RichTextBox() { Dock = DockStyle.Fill };
        public frmTestTor()
        {
            InitializeComponent();
            this.Controls.Add(txt);
        }
        //class ที่ 2 ที่อยู่ใน class แรก
        class TestControl
        {
            void test()
            {
                // อยากให้ เรียกใช้ txt ใน frmTestTor ได้เลยโดยไม่ต้องเรียกใช้ frmTestTor  แบบประกาศตัวแปร เหมือนกับ
                // frmTestTor  f = New frmTestTor();
                // 
            }
        }
    }



กรณีนี้สามารถทำได้ไม๊ครับ



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







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2017-08-21 11:17:34 By : lamaka.tor View : 1357 Reply : 14
 

 

No. 1



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



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


ก็สืบทอดมาอีกทีได้ปะ

Code
class TestControl : SelectForm2 { void test() { txt.Text = ""; } }







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-21 13:27:21 By : OOP
 


 

No. 2



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



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

ตอบความคิดเห็นที่ : 1 เขียนโดย : OOP เมื่อวันที่ 2017-08-21 13:27:21
รายละเอียดของการตอบ ::

คือตัว class TestControl จะต้องอยู่ใน class frmTestTor อ่ะครับ
และอาจจะมีหลายๆ คลาส ที่จะต้องให้เป็นคล้ายๆกับ class TestControl ใน class frmTestTor ครับ

ถ้าเรา inheritance มามันจะทำได้รึครับ(แต่ก็ไม่เคยลองเหมือนกัน)


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-21 16:19:43 By : lamaka.tor
 

 

No. 3



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



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


ได้แน่อนคับ ไม่เชื่อลองดูครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-21 16:21:46 By : Thaidevelopment.NET
 


 

No. 4



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



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

ตอบความคิดเห็นที่ : 3 เขียนโดย : Thaidevelopment.NET เมื่อวันที่ 2017-08-21 16:21:46
รายละเอียดของการตอบ ::
ใส่โค้ดได้ครับ แต่รันแล้วไม่เป็นตามโค้ดครับ
1311

Code (C#)
public partial class Form2 : Form
    {
        public RichTextBox richTextBox1 = new RichTextBox();
        public Form2()
        {
            InitializeComponent();
            richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            richTextBox1.Location = new System.Drawing.Point(0, 0);
            this.Controls.Add(this.richTextBox1);
        }
       public  class TestControl : Form2
        {
            public void Test_(string s)
            {
                for (int i = 0; i < 10;i++ )
                    richTextBox1.Text += "\n " + s + "  " + i; 
            }
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            new TestControl().Test_("Set Text 555");
        }

    }



พอเปลี่ยนโค้ดจาก
Code (C#)
   richTextBox1.Text += "\n " + s + "  " + i; 

เป็น
Code (C#)
 richTextBox1.Invoke(new Action(() => { richTextBox1.Text += "\n " + s + "  " + i; }));

จะ Error แบบนี้ครับ

1312
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-21 17:11:41 By : lamaka.tor
 


 

No. 5



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



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


แบบนี้ไม่ได้คับ ถ้าจะเอาไปแสดงผลได้ ต้องเอา RitchTextBox ไปไว้้ที่ TestControl Class นี้แทนครับ
เพราะเกืดการ New ขึ้นมาจาก new TestControl().Test_("Set Text 555"); มันเลยแสดงผลไม่ได้ใน Class แม่ครับ ถ้าทำได้ต้องให้มัน Return ออกมา

public partial class SelectForm2 : Form
{
RichTextBox richTextBox1 = new RichTextBox();
public SelectForm2()
{
InitializeComponent();
richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
richTextBox1.Location = new System.Drawing.Point(20, 20);
richTextBox1.Width = 300;
richTextBox1.Height = 200;
richTextBox1.Name = "DynamicRichTextBox";
richTextBox1.Font = new Font("Georgia", 16);
this.Controls.Add(this.richTextBox1);

}

class TestControl
{
String app = "";
public String Test_(string s)
{
for (int i = 0; i < 10; i++)
app+="\n " + s + " " + i;

return app;
}
}

private void SelectForm2_Load(object sender, EventArgs e)
{
richTextBox1.AppendText(new TestControl().Test_("Set Text 555"));
}
}
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 09:44:13 By : OOP
 


 

No. 6



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



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

ตอบความคิดเห็นที่ : 5 เขียนโดย : OOP เมื่อวันที่ 2017-08-22 09:44:13
รายละเอียดของการตอบ ::
ปกติผมก็ทำแบบนั้นแหละครับ

แต่ข้อเสียมันก็คือ เราต้องมาแก้ที่ class แม่ ตามที่เราทำๆกัน
ผมเลยมองว่าเราจะมีวิธีพัฒนาให้สามารถแก้ไขที่ class ลูก หรือ ณ method ของ class เลย
ถ้าเรามีโค้ดมากกว่า 10000 บรรทัด และมี class มากกว่า 20 class ใน SelectForm2
เราจะได้ไม่ต้องเสียเวลา ย้อนกลับมา SelectForm2_Load
แต่จะสามารถเรียกใช้ richTextBox1

ณ บรรทัด นั้นได้เลย

แบบนั้นน่าจะดีนะครับ ผมว่า


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 10:20:39 By : lamaka.tor
 


 

No. 7



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



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


ถ้าจะเอาแบบนั้นจริงๆ ก็ทำได้ครับ แค่ส่ง COntrol ไปให้มันด้วยครับ

public partial class SelectForm2 : Form
{
RichTextBox richTextBox1 = new RichTextBox();
public SelectForm2()
{
InitializeComponent();
richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
richTextBox1.Location = new System.Drawing.Point(20, 20);
this.Controls.Add(this.richTextBox1);

}

class TestControl
{
public void Test_(string s,RichTextBox richTextBox1)
{
for (int i = 0; i < 10; i++)
richTextBox1.Text += "\n " + s + " " + i;
}
}

private void SelectForm2_Load(object sender, EventArgs e)
{
new TestControl().Test_("Set Text 555", richTextBox1);
}
}
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 10:41:01 By : OOP
 


 

No. 8



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



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

ปล.

มีวิธีทำแบบนี้ไม๊ครับ

เราส่งค่าให้กับ อีก คลาส ทำงาน
ในขณะที่ คลาส นั้นๆ ทำงานอยู่
อยากให้ คลาสหลัก เปลี่ยนแปลงได้
เช่น

Code (C#)
public partial class Form2 : Form
    {
        public RichTextBox richTextBox1 = new RichTextBox();
        public Form2()
        {
            InitializeComponent();
            richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            richTextBox1.Location = new System.Drawing.Point(0, 0);
            this.Controls.Add(this.richTextBox1);
        }
       
        private void Form2_Load(object sender, EventArgs e)
        {
            new TestControl().Test_("Set Text 555");
        }

    }


Code (C#)
public  class TestControl : Form2
        {
            public void Test_(string s)
            {
                for (int i = 0; i < 10;i++ )
                  // ขณะที่ TestControl  ทำงานอยู่ richTextBox1.Text  ก็จะเปลี่ยนค่าไป
                  //  richTextBox1.Text += "\n " + s + "  " + i; 
            }
        }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 10:45:11 By : lamaka.tor
 


 

No. 9



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



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


แล้วส่ง Parameter แบบข้างบนเข้ามา ใช้ไม่ได้เหรอคับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 11:04:20 By : OOP
 


 

No. 10



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



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

ตอบความคิดเห็นที่ : 9 เขียนโดย : OOP เมื่อวันที่ 2017-08-22 11:04:20
รายละเอียดของการตอบ ::
แบบนั้นแสดงว่า Test_ ต้องทำงานเสร็จก่อน richTextBox1 ถึงจะเปลี่ยนแปลงครับ



แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 11:07:00 By : lamaka.tor
 


 

No. 11



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



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


แบบคีย์ข้อมูลลงไปได้ โดยไม่ค้างใช่ไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 11:12:23 By : OOP
 


 

No. 12



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



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

ง้นลองคำถามนี้ครับ

เราจะประมวลผล หรือ display ค่า เพื่อดูความคืบหน้าของ method ใน อีก class ได้ยังไงครับ

Code (C#)
public partial class Form2 : Form
    {
        public RichTextBox richTextBox1 = new RichTextBox();
        public Form2()
        {
            InitializeComponent();
            richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
            richTextBox1.Location = new System.Drawing.Point(0, 0);
            this.Controls.Add(this.richTextBox1);
        }
       
        private void Form2_Load(object sender, EventArgs e)
        {
            new TestControl().Test_("Set Text 555");
            new TestControl().Test_("Set Text 666");
            new TestControl().Test_("Set Text 777");
            new TestControl().Test_("Set Text 888");
        }

    }



Code (C#)
public  class TestControl 
        {
            public void Test_(string s)
            {
                for (int i = 0; i < 100000;i++ )
                  //ส่งค่าการประมวลผล
            }
        }


จากโค้ดด้านบน Form2 ส่งค่า s ให้ TestControl ประมวลผลซึ่งก็เริ่มตั้งแต่ 0 ถึง 100000 นานมากกกกก
นอกจากนั้น Form2 ยังส่งไปถึง 4 ค่า ทำให้การประมวลผลนานเข้าไปอีก

ตรงส่วนนี้แหละครับที่ผมคิดว่าจะทำยังไงให้ Form2 รับรู้ความคืบหน้าของ work ที่ TestControl ทำอยู่
และอาจจะใช้ร่วมกับ processbar เพื่อให้ user ได้รู้ความคืบหน้า
หรือใช้ richTextBox1 เพื่อดูขั้นตอนได้ดวย


ประวัติการแก้ไข
2017-08-22 11:20:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 11:18:27 By : lamaka.tor
 


 

No. 13



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



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


ประมาณนี้ปะ ใช้ Thread เข้ามาช่วย

public static RichTextBox richTextBox1 = new RichTextBox();
public SelectForm2()
{
InitializeComponent();
richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill;
richTextBox1.Location = new System.Drawing.Point(20, 20);
this.Controls.Add(richTextBox1);

}

public class TestControl
{
private string s;
public TestControl(string s)
{
this.s = s;
}
public void Test_()
{
for (int i = 0; i < 1000000; i++)
{
Action action = () => richTextBox1.Text += "\n " + s + " " + i;
richTextBox1.Invoke(action); // Or use BeginInvoke
}
}

}

private void SelectForm2_Load(object sender, EventArgs e)
{
Thread tid2 = new Thread(new ThreadStart(new TestControl("Set Text 555").Test_));
tid2.Start();
}
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-22 11:32:56 By : OOP
 


 

No. 14



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



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

ตอบความคิดเห็นที่ : 13 เขียนโดย : OOP เมื่อวันที่ 2017-08-22 11:32:56
รายละเอียดของการตอบ ::
โอ๊วววว แบบนี้แหละครับที่อยากได้ ขอบคุณมากครับ


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

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : WinApp C# ผมอยากให้ class ที่อยู่ใน class ใช้ control ของ class แม่ได้ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 อัตราราคา คลิกที่นี่