2011-09-18 229 views
2

我在我的項目中有3個winform,在Form3上有一個複選框。我想要做的就是點擊這個複選框,然後退出表單時,在Form1中進行相同的檢查(無論是否選中)。我現有的代碼如下,但它不會工作,我錯過了一個訣竅的地方?謝謝。在表單之間傳遞數據

//Form3 

Form1 setDateBox = new Form1(); 
setDateBox.setNoDate(checkBox1.Checked); 

//Form1 

public void setNoDate(bool isChecked) 
{ 
    checkBox1.Checked = isChecked; 
} 
+3

你應該命名你的表單和控件。 – SLaks

+0

@Slaks,是的,我應該如何更改vs中的表單名稱,以便在代碼中使用名稱Form1的所有內容都被更改? –

+0

當您重命名錶單時,Visual Studio會自動重命名所有對它的引用。 – SLaks

回答

3

一對夫婦的方法:

1 -商店Form1的變量 「setDateBox」 作爲Form3的一個類的成員,然後訪問來自所對應的複選框的CheckedChanged事件處理程序 「setNoDate」 的方法:

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    setDateBox.setNoDate(checkBox1.Checked); 
} 

2 -如果您不希望setDateBox存儲爲一個類的成員,或者您需要更新不止一種形式,你可以像其左右的時間內Form3定義事件:

public event EventHandler<CheckedChangedEventArgs> CheckBox1CheckedChanged; 

... 

public class CheckedChangedEventArgs : EventArgs 
{ 
    public bool CheckedState { get; set; } 

    public CheckedChangedEventArgs(bool state) 
    { 
     CheckedState = state; 
    } 
} 

創建Form1中的事件的處理程序:

public void Form1_CheckBox1CheckedChanged(object sender, CheckedChangedEventArgs e) 
{ 
    //Do something with the CheckedState 
    MessageBox.Show(e.CheckedState.ToString()); 
} 

事件處理函數分配創建窗體後:

Form1 setDateBox = new Form1(); 
CheckBox1CheckedChanged += new EventHandler<CheckedChangedEventArgs>(setDateBox.Form1_CheckBox1CheckedChanged); 

再火從Form3(事件後的複選框的選中狀態改變):

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    if(CheckBox1CheckedChanged != null) 
     CheckBox1CheckedChanged(this, new CheckedChangedEventArgs(checkBox1.Checked)); 
} 

希望這會有所幫助。

2

checkBox1Form3一員,所以從Form1不能引用這種方式。

,你可以:

  • 創建一個單獨的類大家分享當中的形式,它可將影響整個應用價值
  • 使Form3.checkBox1公開可見的,所以您可以通過myForm3Instance.checkBox1
2
引用它

在包含複選框的表單的設計器中,將其設置爲內部或公共。然後,您可以從窗體對象訪問控件。它是一種快速和骯髒的方式來實現,但它可能會解決您的問題。

ex 
In form1.designer.cs 
existing 
private CheckBox checkbox1; 

new one 

internal CheckBox checkbox1; or 
public CheckBox checkbox1; 
2

您正在創建Form1的一個新實例,而不是引用它的現有實例。

Form1 setDateBox = (Form1)this.Owner 

這應該解決您的問題。