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)
คือตัว class TestControl จะต้องอยู่ใน class frmTestTor อ่ะครับ
และอาจจะมีหลายๆ คลาส ที่จะต้องให้เป็นคล้ายๆกับ class TestControl ใน class frmTestTor ครับ
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");
}
}
แบบนี้ไม่ได้คับ ถ้าจะเอาไปแสดงผลได้ ต้องเอา 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;
ถ้าจะเอาแบบนั้นจริงๆ ก็ทำได้ครับ แค่ส่ง 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);
}
}
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;
}
}
เราจะประมวลผล หรือ 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++ )
//ส่งค่าการประมวลผล
}
}
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();
}