2012-04-29 30 views
3

我創造了這個用戶控件:訪問Winform中用戶控件屬性的正確方法是什麼?

enter image description here

我添加了用戶控制的主要形式,現在我希望對它進行定製。 所以我將不得不添加文本到這3個按鈕,標籤中的文本,填充列表框和設置按鈕的事件。

這樣做的正確方法是什麼?

我環顧網絡,顯然這樣做的方法是在用戶控件中添加公共屬性,以公開我需要的控件的單獨屬性。

喜歡的東西:

public string Button1Text 
    { 
     get 
     { 
      return btn1.Text; 
     } 
     set 
     { 
      btn1.Text = value; 
     } 
    } 

如果我走這條路,我會相當多的公共屬性添加到這個簡單的用戶控制。

但是,不是很容易就暴露出像這樣的用戶控件的整體控制嗎?

public Button MyButton1 
    { 
     get { return this.btn1; } 
     set { this.btn1 = value; } 
    } 

這樣,主窗體可以根據需要簡單地訪問控件及其屬性。

回答

3

從封裝的角度來看,第一種方法更好。第二種方法會導致控件的用戶(表單)依賴於控件的視圖,這可以防止將來更改視圖。

+0

但是,如何處理ListBox比簡單的TextBox更復雜?它有很多我想要訪問的屬性,如DataSource,DisplayMember,Items,SelectedIndex,SelectedItem,SelectedItems,SelectedValue,...我是否公開每個屬性?如果是這樣,第二種方法有什麼不同?在這兩種情況下,表單都綁定到ListBox。或者我應該封裝不同? – user850010 2012-04-29 08:37:24

+0

我覺得你越用這種方式導出屬性,就越有創建依賴關係。嘗試抽離。另外,我建議你學習WPF和MVVM指令。 – 2012-04-29 08:43:42

2

代碼的第一位是正確的方法。你將不得不創造很多,但這是做到這一點的正確方法。

1

第一種方法要好得多,因爲您只能爲您希望能夠從父控件訪問的按鈕的每個單獨屬性創建屬性。

如果您使用第二種方式,那麼任何想要使用控件的人都可以移動和調整控件內的各個控件的大小。然後,它實際上不再是自定義控件,而是更多的面板比面板更難使用。我無法想出爲什麼能夠讓父母在子控件中圍繞單個元素移動的任何理由。

+0

我創建了用戶控件,因爲我在應用程序的少數幾個地方需要這些控件組,所以我創建空白用戶控件並使主窗體可以訪問其子控件纔有意義。 – user850010 2012-04-30 17:39:57

相關問題