在C#中调用其他类(Windows窗体)中的方法

时间:2016-04-16 10:13:26

标签: c# forms winforms

我有两种形式“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();
    }
}

3 个答案:

答案 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();
}