我现在陷入了严重的问题。 Plz帮助我....
我创建了一个FORM调用form1。它包含一个文本框T1。我开始跑... 在form1中有一个运行的线程,它执行一些进程P,它是另一个CLASS的成员,它调用class2。 要运行进程P,我需要来自文本框T1的值。我该怎么做?
让我告诉你,我已经尝试过了。 我在class2中创建了form1的实例,然后尝试读取textbox(T1)值。但那是空的,我想出了理由......休息,我尝试了财产......再次失败......
PLZ帮我解决这个问题。我被困了几个小时......
答案 0 :(得分:1)
这只是一个指向正确方向的例子。如在另一个答案中所提到的,您可能必须调用以防止跨线程异常。
在名为 FORM 的类中添加方法或属性:
public string GetTextboxContent()
{
return textbox.Text;
}
将 class2 更改为以下内容:
class class2
{
private MyForm m_form;
public class2(MyForm form)
{
m_form = form;
}
public void DoThreadStuff()
{
string value = m_form.GetTextboxContent();
}
}
你说“我在class2中创建了form1的实例,然后尝试读取textbox(T1)值。但这是空的”:不要创建新实例:将现有实例传递给 class2 强>!
答案 1 :(得分:0)
Assuming Class1 is the class which does some process in thread. Create the property which corresponds to type of your main form. In this case, its called Form1.
class Class1
{
//his is the property
public Form1 MyMainForm { get; set; }
public void ShowText()
{
//here the control is accesses
//((TextBox)MyMainForm.Controls.Find("textBox1",true)[0])
MessageBox.Show(((TextBox)MyMainForm.Controls.Find("textBox1",true)[0]).Text);
}
}
im assuming ShowText() method is called on new thread, when button is clicked.
private void button1_Click(object sender, EventArgs e)
{
//craete instance of class1
Class1 c = new Class1();
//set the property
c.MyMainForm = this;
//start the method is new thread
ThreadStart ts=new ThreadStart(c.ShowText);
Thread t=new Thread(ts);
t.Start();
}
答案 2 :(得分:0)
试试这个..
你上课..
ClassText
{
YourClass(String textVAlue)
{
}
}
你的表格..
ClassText ct = new ClassText();
ct.YourClass(Textbox1.text);