如何使用C#从另一个表单按下按钮?

时间:2014-02-08 18:54:09

标签: c# forms button

我有两种形式:

  1. 制作屏幕截图的Form1。
  2. Form2,有2个按钮来操作由form1创建的屏幕截图。
  3. Form1还有一个“隐藏”按钮,其中包含保存屏幕截图的方法。

    我的问题:

    如何从form2单击form1的按钮? 和 如何检查form1何时关闭然后关闭form2?

    我尝试过这样的事情但是当我点击form2保存按钮时没有任何反应:

    var form = Form.ActiveForm as Form1;
    if (form != null)
    {
        form.button1.PerformClick();
    }
    

2 个答案:

答案 0 :(得分:5)

首先,多个表单的正常工作方式是,当您关闭“启动”表单时,辅助表单也将关闭。如果您要在Form2中创建Form1,我会使用(your second Forms Instance).Show(this)来展示它。然后,您可以通过Form2的父属性访问该表单。即。

      var form = (Form1)this.Owner();

然后,您应该能够访问Form1的所有公共方法,而且我会使用您正在使用的代码来保存屏幕截图并放入公共方法,无需将其放入按钮的单击事件,尤其是在隐藏按钮的情况下。

这是一个简单的例子:

<强> Form1中

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2();
        frm.Show(this);
    }

}

<强>窗体2

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var frm = (Form1)this.Owner;
        if (frm != null)
            frm.button1.PerformClick();
    }
}

答案 1 :(得分:0)

而不是制作隐藏按钮,而不是将方法与按钮相关联。

Form1.cs

public void SaveScreenshot()
{
    //TODO: Save the Screenshot
}

Form2.cs

Form1 form = Application.OpenForms.OfType<Form1>().FirstOrDefault();
if (form != null) {
    form.SaveScreenshot();
}

另外,请务必将SaveScreenshot方法声明为publicinternal

我更改了获取Form1的代码。如果您点击Form2上的按钮,则Form2将成为ActiveForm,因此您的代码永远不会“看到”Form1。我在代码中使用了LINQ方法,只有在代码顶部有using System.Linq;时才会有效。