繁体   English   中英

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

[英]How to press a button from another form using C#?

我有两种形式:

  1. 用于截屏的Form1。
  2. Form2有2个按钮来操作form1创建的屏幕截图。

Form1还有一个“隐藏”按钮,其中包含保存屏幕截图的方法。

我的问题:

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

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

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

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

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

然后,您应该能够访问Form1所有公共方法,另外我会使用您正在使用的代码来保存屏幕截图并放入公共方法,不需要在Button的单击事件中使用它,特别是如果按钮是隐藏的。

这是一个简单的例子:

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

而不是制作隐藏按钮只是使一个方法没有链接到按钮。

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;才能using System.Linq; 在代码的顶部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM