我有这个MainForm类:
namespace homework_001{
public partial class MainForm : Form
{
public MainForm()
{InitializeComponent();}
public string Change
{
get{ return label.Text;}
set{ label.Text = value;}
}
void ButtonClick(object sender, EventArgs e)
{
Test a = new Test();
a.changer();
}
}}
我有这堂课:
namespace homework_001{
public class Test
{
private MainForm form = new MainForm ();
public void changer(){
form.Change = "qqqqq!";
}
}}
所需的工作流程是按下按钮上的标签/文字。 它会编译,但按下按钮后没有任何反应。
可能是什么问题?
答案 0 :(得分:3)
发生的事情是您展示的表单与类Test
中的表单不同。
为了使事情有效,您应该以这种方式将表单传递给类Test
:
public class Test
{
private MainForm form;
public Test(MainForm f)
{
this.form=f;
}
public void changer(){
form.Change = "qqqqq!";
}
}}
并在您的主要表单中执行此操作:
public partial class MainForm : Form
{
public MainForm()
{InitializeComponent();}
public string Change
{
get{ return label.Text;}
set{ label.Text = value;}
}
void ButtonClick(object sender, EventArgs e)
{
Test a = new Test(this);
a.changer();
}
}}
答案 1 :(得分:1)
您正在创建另一个MainForm
对象,该对象与屏幕上实际显示的对象不同。要处理同一个对象,您需要将其传递给Test
类,如下所示:
Test a = new Test(this); // "this" is the MainForm object you want to work with
a.changer();
这将give Test
class a reference MainForm
对象。
现在,您需要在Test
中使用一个参数创建constructor,并将收到的引用存储在Test
private MainForm form
中的表单对象中领域。你不应该有这样的麻烦。
答案 2 :(得分:1)
完成创建主窗体的新对象..相反。制作字符串Change public and static
并从Mainform.Change="some text";
答案 3 :(得分:-1)
更改下面的代码:
void ButtonClick(object sender, EventArgs e)
{
Test a = new Test();
a.changer(ref this);
}
您通过引用将表单对象传递给函数并更改了
public class Test
{
public void changer(ref MainForm form){
form.Change = "qqqqq!";
}
}
请参阅此链接Passing Reference-Type Parameters (C# Programming Guide)