2

コンボボックスがフォーカスを失ったときに、DisplayMember ではなく、ValueMember を表示するデータバインドされたコンボボックス (WinForms) があります。この問題が発生した簡単な例を次に示します。

Public Class Populator

    Public Class Job
        Property JobID As Integer
        Property JobName As String

        Public Sub New(ByVal id As Integer, ByVal name As String)
            JobID = id
            JobName = name
        End Sub
    End Class

    Public Class Person
        Property Name As String
        Property JobID As Integer

        Public Sub New(ByVal n As String, ByVal id As Integer)
            Name = n
            JobID = id
        End Sub
    End Class

    Public Shared Function GetJobs() As List(Of Job)
        Dim joblist As New List(Of Job)
        joblist.Add(New Job(1, "Manager"))
        joblist.Add(New Job(2, "Clerk"))
        joblist.Add(New Job(3, "Unemployed"))
        Return joblist
    End Function

    Public Shared Function GetPeople() As List(Of Person)
        Dim personList As New List(Of Person)
        personList.Add(New Person("Bill", 2))
        personList.Add(New Person("Sally", 1))
        personList.Add(New Person("Mark", 3))
        personList.Add(New Person("Angie", 3))
        personList.Add(New Person("Phil", 2))
        Return personList
    End Function

End Class

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Populator_PersonBindingSource.DataSource = Populator.GetPeople
        Me.JobBindingSource.DataSource = Populator.GetJobs

    End Sub

End Class

ここにいくつかのスクリーンショットがあります:

データバインディング デザイナーの使用

アイテム選択中

集中力を失った後

コンボボックスがフォーカスを失ったときに DisplayMember の表示を維持する方法についてアドバイスをください。

4

2 に答える 2

0

ComboBox の DropDownStyle を、DropDown ではなく DropDownList に設定して、この焦点が合っていない動作をなくす必要があります。どうやら、[データ ソース] タブからフィールドを ComboBox としてドラッグすると、ComboBox の DropDownStyle が最初は DropDown に設定されているようです。

上記のサンプル プログラムと実際のプログラムでこれを試しました。どちらの場合も機能しました。

于 2013-06-12T19:36:36.737 に答える
-1

視覚補助を使用しないで、SQL コードを使用し、cs コードに入力します

       //when you set data source it loses focus to window title
        cmb.datasource = datatable;
        cmb.valueMember = "col1";
        cmb.dispMember = "col2";

        // this does the trick. gives focus back into combobox's list 
        cmb.DropDownStyle = ComboBoxStyle.DropDownList; 
        cmb.DropDownStyle = ComboBoxStyle.DropDown;
于 2016-01-13T08:30:40.620 に答える