我有一个困惑让我简要解释一下。 我有一个表单,我放置了一个文本框和一个命令按钮。 我有一个简单的课程。
class Class1
{
string s = "hi";
Form1 form1 = new Form1();
public void cl()
{
form1.textBox1.Text = s;
}
}
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
class1.cl();
}
我的程序应该做的是当我点击按钮时,文本框中的文本应该变为“hi”。 我的错误是当我点击按钮时没有任何反应。
答案 0 :(得分:9)
在Class1
中,您正在创建Form1
的新实例,而不是使用已存在的实例。在按钮处理程序中,您可以将引用传递给当前表单,如下所示:
class Class1
{
string s = "hi";
Form1 form1;
public Class1( Form1 targetForm )
{
form1 = targetForm;
}
public void cl()
{
form1.textBox1.Text = s;
}
}
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1( this );
class1.cl();
}
答案 1 :(得分:0)
您正在创建一个新的Form1实例,因此您要更改未显示的表单上的文本,也不是实际单击该按钮的表单。您可以通过将表单作为参数传递给方法调用来执行您想要的操作:
class Class1
{
string s = "hi";
public void cl(Form1 form1)
{
form1.textBox1.Text = s;
}
}
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
class1.cl(this);
}
但是可能更好的形式(取决于实际情况)仅在表单代码本身中对表单外观进行更改,使用帮助程序类仅生成数据,例如:
class Class1
{
string s = "hi";
public string cl()
{
return s;
}
}
private void button1_Click(object sender, EventArgs e)
{
Class1 class1 = new Class1();
this.textBox1.Text = class1.cl();
}
答案 2 :(得分:0)
您正在创建一个新的Form1对象并设置文本框值,而您不设置已打开表单的文本框值。
您可能应该致电textbox1.Text = "x";
。
如果您在c1函数中调用Show()
方法,则会看到填充了文本框的新表单。
答案 3 :(得分:0)
您在点击处理程序的末尾缺少class1.ShowDialog()
方法调用。
答案 4 :(得分:0)
添加用于显示表单的代码。 form1.ShowDialog()会将表单显示为“模态”对话框。模态是在此表单关闭之前,您无法对原始表单执行任何其他操作。
你得到的行为没有发生任何事情,因为表格不可见。一旦你打电话给 ShowDialog(),所有代码都将在该表单上执行,在你关闭表单之前,你将无法调用它。
class Class1
{
string s = "hi";
Form1 form1 = new Form1();
public void cl()
{
form1.textBox1.Text = s;
form1.ShowDialog(); // Add this line to show the form.
}
}
答案 5 :(得分:-1)
你为什么不抓住你的错误?
class Class1
{
private Form1 _Instance = null;
public Form1 Instance
{
get{return _Instance;}
set{_Instance = value;}
}
public void cl()
{
if(Instance == null)
{
try
{
Instance = new Form1();
}catch (SomeException e)
{
//Log e.ToString();
return;
}
}
Instance.textBox1.Text = "hiya";
}
}
通过这种方式,您的应用程序将不易出错,并且更易于调试。