[英]How to press a button from another form using C#?
我有两种形式:
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
方法声明为public
或internal
。
我更改了获取Form1
的代码。 如果单击Form2
上的按钮,则Form2
将成为ActiveForm
,因此您的代码将永远不会“看到” Form1
。 我在我的代码中使用了LINQ方法,只有在using System.Linq;
才能using System.Linq;
在代码的顶部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.