2014-02-08 175 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;時才能使用。

相關問題