這可能是不可能的或有點錯了,但在WinForms我有組合框需要填充特定的選項。該項目使用了大約10種不同的形式,都具有相似但略有不同的功能:因此,爲什麼我不使用一種形式並根據需要隱藏/顯示控件。傳遞枚舉作爲參數 - 作爲字典(的字符串,枚舉)(VB 2012)
現在我做了一個簡單的選項字典並用Enum提供值。現在我意識到我有重複的代碼,並希望整合它。選項集是日期順序和名稱順序,但我還有一兩個要列出。
這是我做過嘗試,但不能把字典爲:
Public Sub BuildOrderOptions(nameorder As ComboBox, Options As Dictionary(Of String, [Enum]))
nameorder.Items.Clear()
For Each item In Options
nameorder.Items.Add(item)
Next
nameorder.DisplayMember = "Key"
nameorder.ValueMember = "Value"
End Sub
Property NameOrderOptions As New Dictionary(Of String, PersonList.orderOption) From {{"First Name", PersonList.orderOption.FirstName},
{"Last Name", PersonList.orderOption.LastName},
{"Room Number", PersonList.orderOption.RoomNumber}}
Property DateOrderOptions As New Dictionary(Of String, OrderDate) From {{"Newest First", OrderDate.NewestFirst}, {"Oldest First", OrderDate.OldestFirst}}
我試着輸入一些變化和[枚舉] .getnames等,但我無法通過不同的詞典類型 - 我認爲我已經過度複雜了整個業務,但現在感覺我錯過了一個優雅的解決方案。不久,我將轉換回單獨的字符串匹配,或只是每個盒子類型的功能 - 邪惡的重複,但我可以繼續前進。
我是否認爲有一個更好的方法來做到這一點?除非我只是爲選項定義某種全局資源 - 但全局變量是不對的?
編輯:固定感謝史蒂文。如果任何人發現它有用或者更好,任何人都可以批評和更好,這裏是所有表單可以用來生成他們的選項的模塊代碼。
Public Sub BuildOrderOptions(nameorder As ComboBox, Options As IDictionary)
nameorder.Items.Clear()
For Each item In Options
nameorder.Items.Add(item)
Next
nameorder.DisplayMember = "Key"
nameorder.ValueMember = "Value"
End Sub
Property NameOrderOptions As New Dictionary(Of String, orderOption) From {{"First Name", orderOption.FirstName},
{"Last Name", orderOption.LastName},
{"Room Number", orderOption.RoomNumber}}
Property DateOrderOptions As New Dictionary(Of String, OrderDate) From {{"Newest First", OrderDate.NewestFirst}, {"Oldest First", OrderDate.OldestFirst}}
Property personStatusOptions As New Dictionary(Of String, personStatus) From {{"Active", personStatus.Active},
{"InActive", personStatus.InActive},
{"All", personStatus.All}}
Public Sub BuildComboBoxes(ListBoxes As Dictionary(Of ComboBox, IDictionary))
For Each pair In ListBoxes
BuildOrderOptions(pair.Key, pair.Value)
Next
End Sub
Public Enum OrderDate
OldestFirst
NewestFirst
End Enum
Public Enum personStatus
Active
InActive
All
End Enum
Public Enum orderOption
None
FirstName
LastName
RoomNumber
End Enum
這裏是我使用它得到一個表格的方式 - 是的,我可以有一大堆的參數或多個函數調用:我只是想有一個對象給我一個單一的參數來傳遞。
BuildComboBoxes(New Dictionary (Of ComboBox , IDictionary) From {{NameOrder, NameOrderOptions},
{DateOrder, DateOrderOptions},
{personStatus, PersonStatusOptions}})
你固定它!尼斯之一。它不會讓我很快接受你的回答:)。這正是我無法想到的信息 - 過於集中在枚舉位上。謝謝。我喜歡這個網站:)。 –