2012-05-05 49 views
0

我不是在尋求答案,而是爲創建更好的解決方案提供想法和建議。我甚至正在尋找一些基本的面向對象設計理論,因爲我認爲這一定是一種常見的情況,但我不知道如何正確地使用它來找到可靠的搜索結果。我有這樣的例子(我會留下代碼,因爲它很容易解釋): 我有一個包含一個樹形視圖,一個按鈕和一個文本框的表單。我也有一個類TextClass,它有兩個字符串:Text和Name。在多個類實例中存儲和檢索控制值C#

當按鈕被點擊:

  • 創建一個新的樹節點。爲TreeNode指定一個唯一的名稱(例如:「Instance1」)並將其添加到Treeview中
  • 創建該類的一個實例TextClass。分配唯一的名稱(例如: 「的Instance1」)的TextClass.Name
  • TextClass的新實例添加到列表,TextClassList

當點擊在TreeView節點:

  • 遍歷該列表,TextClassList,並發現其當前選擇的TreeNode.Name
  • 然後設置相匹配的字符串TextClass.Name:Textbox.Text = TextClass.Text

當Textbox_TextChanged被觸發:

  • 遍歷列表,找到其當前選擇的樹節點相匹配的字符串TextClass.Name,TreeNode.Name
  • 然後設置:TextClass.Text = Textbox.Text

所有這些工作得很好,但它似乎...馬虎。我在問是否有更好的/適當的方法去實現這種存儲和檢索值的方法。如果這是一個面向對象的基本原則,我將不勝感激關鍵詞,我可以做一些搜索。

謝謝 道格

+0

我假設您在此處使用Winforms?如果您可以選擇切換到WPF,那麼綁定將爲您處理很多場景(幾乎)免費:) – Jedidja

+0

我將研究WPF以供將來使用,但對於此程序,它必須是winforms。謝謝你的建議 – Doug

回答

0

甲樹節點具有可用於其與該節點相關聯的存儲數據的屬性Tag。因此,您可以將每個新創建的節點存儲TextClass實例。這樣您就不必維護一個額外的列表並將其與TreeNode同步。

我也不會依賴關聯的顯示名稱:如果您希望名稱變長或者允許兩個節點具有相同的名稱,則會遇到問題。

另一個問題是,如果沒有Tag屬性,您將如何執行此操作。然後我會使用Dictionary來將TreeNode實例映射到TextClass實例。

所以,如果我是做出來的這種一般規則:

  • 嘗試使用真正的引用盡可能而不是字符串來引用一個實例。
  • 請勿使用顯示名稱進行標識
+0

啊哈。我喜歡使用真實引用而不是字符串的想法,所以我將實現標籤。感謝您的改進。 – Doug

相關問題