我有两种形式“Form1”和“Form2” 现在我想调用方法“change_lbl()”在“Form2”中存在于“Form2”中,但当我在“Form2”中调用此方法时,它未实现且无法实现
代码Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void change_lbl()
{
lbl_form1.Text = "Its Done !";
}
private void btn_gofrm2_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}
}
代码表格2:
public partial class Form2 : Form
{
Form1 frm1 = new Form1();
public Form2()
{
InitializeComponent();
}
private void btn_form2_Click(object sender, EventArgs e)
{
frm1.change_lbl();
this.Close();
}
}
答案 0 :(得分:2)
代码正确,方法正确调用!您正在创建并使用Form1
的新实例而不显示它,但看起来您希望看到应用程序正在使用的Form
的默认实例中的更改,并且当前已打开。
拥有Form1
class的开放实例:
Form1 myForm1=(Form1)Application.OpenForms["Form1"];
答案 1 :(得分:1)
我建议你看看这个项目。这可能会解决您的问题。基本上当你调用Form2并单击一个按钮(我的意思是Form2按钮)时,Form1必须“捕获”事件,即Form2buttonClicked之类的事件。看看这篇文章了解更多。 http://www.codeproject.com/Articles/17371/Passing-Data-between-Windows-Forms
这可能有点无关紧要,但这对你也有帮助 http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms
答案 2 :(得分:0)
在EventHander
中创建Form2
并在Form1
订阅该事件。工作很好
public partial class Form2 : Form
{
public event EventHandler ButtonClicked;
public Form2()
{
InitializeComponent();
}
private void btn_form2_Click(object sender, EventArgs e)
{
if(ButtonClicked != null);
ButtonClicked(sender, new EventArgs());
this.Close();
}
}
现在Form1
订阅该活动并致电change_lbl()
private void btn_gofrm2_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.ButtonClicked += (se,ev) => change_lbl();
frm2.Show();
}