vb.net Как переписать текст в выпадающем списке после выпадающего закрытого события - PullRequest
0 голосов
/ 06 июня 2018

Я создал этот фрагмент кода, чтобы проиллюстрировать идею, он использует комбинированный список и текстовое поле

Private Sub ComboBox2_DropDown(sender As Object, e As EventArgs) Handles ComboBox2.DropDown
    ComboBox2.Items.Clear()
    ComboBox2.Items.Add("0001 | Apple")
    ComboBox2.Items.Add("0002 | Pear")
    ComboBox2.Items.Add("0003 | Banana")
    ComboBox2.Items.Add("0004 | Pineapple")
    ComboBox2.Items.Add("0005 | Cherry")
End Sub

Private Sub ComboBox2_DropDownClosed(sender As Object, e As EventArgs) Handles ComboBox2.DropDownClosed
    Dim selecteditem As String = ComboBox2.Items(ComboBox2.SelectedIndex)
    ComboBox2.Text = Strings.Left(selecteditem,4)
    TextBox2.Text = Strings.Left(selecteditem,4)
End Sub

Когда я выбираю элемент из комбинированного списка, происходит то, что комбинированный список продолжает показывать всю строку, покав текстовом поле отображаются только первые 4 символа.

Как перезаписать текст в поле со списком после закрытия списка?

* изменить * Я попробовал комбинацию решенийно столкнулся с проблемой, потому что данные были связаны с источником данных, поэтому невозможно изменить элемент.Это новый код:

Private Sub ComboBox2_DropDown(sender As Object, e As EventArgs) Handles ComboBox2.DropDown
    SQL.ExecQuery($"select ID, Name, RTRIM(ID + ' | ' + Name) as SingleColumn from GCCTEST.dbo.tblFruit")
    ComboBox2.DataSource = SQL.DBDT
    ComboBox2.DisplayMember = "SingleColumn"
End Sub
Private Sub ComboBox2_DropDownClosed(sender As Object, e As EventArgs) Handles ComboBox2.DropDownClosed
    ComboBox2.DisplayMember = "ID"
    ComboBox2.SelectedIndex = 0
End Sub

Теперь мне нужно только, чтобы 0 было индексом, который я выбрал ...

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Я использовал несколько свойств и метод .net String.SubString вместо старого vb6 Strings.Left.

Private Sub ComboBox1_DropDownClosed(sender As Object, e As EventArgs) Handles ComboBox1.DropDownClosed
        Dim SelectedString As String = ComboBox1.SelectedItem.ToString
        Dim ChangedString As String = SelectedString.Substring(0, 4)
        Dim index As Integer = ComboBox1.SelectedIndex
        ComboBox1.Items(index) = ChangedString
End Sub

. Вы можете заполнить поле со списком одно за другим, чтобы избежать проблем с привязкой следующим образом..

Private Sub ComboBox1_DropDown(sender As Object, e As EventArgs) Handles ComboBox1.DropDown
        Using cn As New SqlConnection("Your connection string")
            Using cmd As New SqlCommand("Select ID, Name From tblFruit;", cn)
                cn.Open()
                Using dr As SqlDataReader = cmd.ExecuteReader
                    ComboBox1.BeginUpdate()
                    While dr.Read
                        ComboBox1.Items.Add(dr(0).ToString & " | " & dr(1).ToString)
                    End While
                    ComboBox1.EndUpdate()
                End Using
            End Using
    End Using
0 голосов
/ 06 июня 2018

Следующее должно работать.Если в этом нет необходимости, не заполняйте поле со списком при каждом раскрывающемся меню, вместо этого вызывайте метод FillComboBox при загрузке Form.

Private Sub FillComboBox()
    SQL.ExecQuery($"select ID, Name, RTRIM(ID + ' | ' + Name) as SingleColumn from GCCTEST.dbo.tblFruit")
    ComboBox2.DataSource = SQL.DBDT
    ComboBox2.DisplayMember = "ID" 
    ComboBox2.ValueMember = "ID"
End Sub

Private Sub ComboBox2_DropDown(sender As Object, e As EventArgs) Handles ComboBox2.DropDown
    Me.ComboBox2.DisplayMember = "SingleColumn"
End Sub

Private Sub ComboBox2_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox2.SelectionChangeCommitted
    Dim selV As Object = Me.ComboBox2.SelectedValue

    Me.TextBox2.Text = CStr(selV)
    Me.ComboBox2.DisplayMember = "ID"

    'Set the current value again, otherwise the combobox will always display the first item
    Me.ComboBox2.SelectedValue = selV
End Sub
0 голосов
/ 06 июня 2018

Вы можете решить эту графическую проблему, поместив Label в Form и переместив его на ComboBox.

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

    Me.Label1.AutoSize = False
    Me.Label1.BackColor = Me.ComboBox1.BackColor
    Me.Label1.Location = New Point(Me.ComboBox1.Location.X + 1, Me.ComboBox1.Location.Y + 1)
    Me.Label1.Size = New Size(Me.ComboBox1.Width - 18, Me.ComboBox1.Height - 2)

    Me.ComboBox1.Items.Add("0001 | Apple")
    Me.ComboBox1.Items.Add("0002 | Pear")
    Me.ComboBox1.Items.Add("0003 | Banana")
    Me.ComboBox1.Items.Add("0004 | Pineapple")
    Me.ComboBox1.Items.Add("0005 | Cherry")

End Sub

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    Me.Label1.Text = Trim(Me.ComboBox1.SelectedItem.Split("|")(0))

End Sub

. Обратите внимание:

  • вы можете заполнить ComboBox один раз во время Form события загрузки
  • вы можете использовать SelectedIndexChanged вместо DropDown и DropDownClosed события
  • , если это не графическоеПроблема, пожалуйста, посмотрите на DisplayMember и ValueMember свойства
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...