2014-02-08 214 views
2

我有两种形式:如何使用C#按下另一个窗体中的按钮?

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

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

我的问题:

如何从form2中单击form1的按钮? 和 我该如何检查form1何时关闭,然后关闭form2呢?

我已经试过这样的事情,但是当我点击窗口2保存按钮没有任何反应:

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

回答

3

一切正常方式多种形式的工作首先是,当你关闭启动窗体,然后辅助形式也将关闭。如果您在Form1中创建您的Form2,我会使用(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(); 
    } 
} 
+0

我需要使用那个隐藏的按钮。我会尝试你的方法,我会回来的。 – user3281950

+0

- >对象引用未设置为对象的实例。 var form =(Form1)this.Parent; form.button1。PerformClick(); – user3281950

+0

你是如何创建form2的。您当时需要分配父项。 –

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;时才能使用。

相关问题