2017-01-11 6 views
0

Comboboxのバインディングをclass propertyに追加しようとしています。プロパティは列挙型です。私はenumのアイテムをComboboxにロードすることができたかもしれませんが、それはちょっと違法ですが、うまく機能します。 (改善の提案も歓迎します)フォームがロードされると、Comboboxはアクティブな性別を示し、すべてのオプションはドロップダウンメニューに表示されます。コンボボックスへのオブジェクトプロパティのバインド

しかし、Comboboxのフォーカスをbuttonに変更すると、それは男性に戻ります(私のテストでは、性別を女性に変更したい)。

新しい性別の値がオブジェクトに確実に渡されるようにするにはどうすればよいですか?

あなたはデータバインディングを使用している場合これは私のコードサンプル

Public Class Form1 

    Private Personobject As Person 

    Public Sub New() 
     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     Personobject = New Person 
     Personobject.Gender = GenderEnum.Male 

     Dim enumType As Type = GetType(GenderEnum) 
     Dim names() As String = [Enum].GetNames(enumType) 

     For Each s As String In names 
      ComboBox1.Items.Add(s) 
     Next 

     ComboBox1.DataBindings.Add("Text", Personobject, "Gender") 
    End Sub 

    Private Enum GenderEnum 
     Male 
     Female 
    End Enum 

    Private Class Person 
     Public Property Gender As GenderEnum 
    End Class 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Debug.Print(Personobject.Gender.ToString) 
    End Sub 
End Class 

答えて

1

あり、その後、選択した値として選択し、ComboBox.SelectedValueのためのアイテムの結合収集のためComboBox.DataSourceを使用

Public Class Form1 

    Private _Person As Person 

    Public Sub New() 
     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 

     ' Bound list of enums to the combobox 

     Dim genderList As List(Of GenderEnum) = [Enum].GetValues(GetType(GenderEnum)) 
                .OfType(Of GenderEnum) 
                .ToList() 
     ComboBox1.DataSource = genderList 

     _Person = New Person With { .Gender = GenderEnum.Male } 

     // Bound Person.Gender to the ComboBox.SelectedValue 
     ComboBox1.DataBindings.Add("SelectedValue", _Person, NameOf(_Person.Gender), True) 

    End Sub 

    Private Enum GenderEnum 
     Male 
     Female 
    End Enum 

    Private Class Person 
     Public Property Gender As GenderEnum 
    End Class 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Debug.Print(Personobject.Gender.ToString) 
    End Sub 
End Class 

したい場合は、選択コンボボックスことに注意してください値が変更されたときPersonクラスがINotifyPropertyChangedインターフェイスを実装し、セッターにPropertyChangedイベントを発生させる必要がある場合以外は_person.Genderを別の場所に更新するとGenderのプロパティです。

+0

この文章では、 'genderListとして新しいリスト(Of Gender)([Enum] .GetValues(GetType(Gender))')というエラーが表示され、ジェンダーを受け入れず、潜在的な修正が利用できません。私は何かを輸入する必要がありますか? –

+0

答えで修正されました。 OfType(Of Gender) ' – Fabio

+0

' Gender 'の型は定義されていませんので、 '[Enum] .GetValues(GetType(Gender))になるように' Gender'の配列に変換する必要があります。それでもエラーは持続します。 –

関連する問題