私は自分のプロジェクトで物事をオブジェクト指向に保つことに取り組んできました。現在、アプリケーションのすべてのクラスをプレゼンテーション層として機能する WinForms プロジェクトに提供する .DLL を使用しています。
たとえば、私の .DLL は、フォーム内のコードに SortableBindingList(Of T) を返します。SortableBindingList(Of T) はhereから取得されます。SortableBindingList(Of Product) を想定しましょう。.DLL の関数Services.Products.GetList()
が SortableBindingList(Of Product) を返すと仮定すると、これは簡単に実行できます。
DataGridView1.DataSource = Services.Products.GetList()
これで、DataGridView に製品のリストが適切に取り込まれました。罰金。ただし、DataGridView で選択されたオブジェクトを返す .SelectedItem プロパティはありません。
' Doesn't exist!
Dim p As Product = DataGridView1.SelectedItem
' Need to make another DB call by getting the Product ID
' from the proper Cell of the DataGridView ... yuck!
ただし、ComboBox または ListBox は、実際には Product オブジェクトをそのまま格納して返します。
' Valid!
ComboBox1.DataSource = Services.Products.GetList()
Dim p as Product = ComboBox1.SelectedItem
しかし別の... ComboBox と ListBox は、Product オブジェクトのすべてのフィールドを表示するわけではなく、DisplayMember プロパティの値のみを表示します。
VB.NET 2008 には、オブジェクトのフィールド全体を実際に表示し、ユーザーが選択したときにそのオブジェクトを返す、必要なオブジェクト指向機能を提供する、欠けている素敵なコントロールがありますか? なぜ無いのか不思議です。