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

我有两种forms:

  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的click事件中使用它,特别是如果按钮是隐藏的。

这是一个简单的例子:

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().FirstOrDefault(); if (form != null) { form.SaveScreenshot(); } 

另外,请确保将SaveScreenshot方法声明为publicinternal

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