2012-12-04 19 views
1

我只是想知道。如果我有兩種形式..形式1和形式2,您需要訪問文本框,標籤等。例如,使其可見或更改其文本。從Form2?從另一個表單訪問表單中的東西的最佳方式是什麼? C#

製作方法在表1所示:

public void setTextBoxVisible(){ 
    textBox1.Visible = true; 
} 

或在表格1製作一個訪問,並且從表格2改變的可見性,如:

在表格2:

public TextBox TextBox1 { 
    get { return textBox1; } 
} 

在表1:

Form1 form1 = new Form1(); 
form1.TextBox1.Visible = true; 

我知道這可能是一個愚蠢的問題,但我仍然對編程不熟悉,並且希望知道能夠做這些事情的最佳方式。謝謝:)

回答

2

選項1絕對更好,因爲您只是公開了要公開的部分。
您不僅在調用者的一部分上留下較少的錯誤空間,而且您正在說明您的方法的意圖。

在選項2中,您的控件的所有方面都是可訪問的,並且可以從外部代碼改變,而不僅僅是Visible屬性。

你可以,如果它適合你的喜好更好,創建一個屬性:

public bool TextBox1Visible 
{ 
    get { return TextBox1.Visible; } 
    set { TextBox1.Visible = value; } 
} 
+0

哦,不知道這是可能的!非常感謝Rotem ..所以這樣你只會暴露可見性! – Bernice

+0

+1,我打算給我的答案鍵入一個類似的擴展名,只是看到你的:) – Habib

+0

確切地說,你讓'Form1'負責它自己的UI,因爲更好。 – Rotem

2

在你的第二種情況下,你聲明只讀屬性,而在第一種方法中,你正在通過public函數公開功能,哪種IMO更清晰和更好的方法。

編輯: 我看到您的第一種方法的問題之一是,您不能阻止用戶更改除可見以外的其他屬性。用戶(開發人員)也可能錯誤地設置了TextBox的Text屬性。例如

form1.TextBox1.Text = "Some new text"; 

以上不是預期的行爲。 (你只是想設置Visible屬性)

+0

感謝您的回答!我也這麼認爲,但不確定是否推薦使用訪問器! – Bernice

+0

不客氣,我用你的第一種方法看到的一個問題是你不能阻止用戶改變Visible以外的其他屬性。 – Habib

2

程序員偏愛我想..我總是喜歡方法1,作爲錯誤那裏有更少的空間,如果你想改變它在很多情況下,那麼它在做的一行代碼

0

使用的數據模型爲分離式類。當數據模型發生變化時,使用觀察者/ MVVM模式獲得通知。

0

我假設你在Form2中有一些動作觸發Form 1的變化。給出你的選擇,我會得到1.另一種選擇是考慮事件。 Form1訂閱Form2上的事件。當它被觸發時,你可以將你想要的任何內容傳遞給Form1,並讓它執行你想要的任何更新或更改。

相關問題