vb.net如何在dropdownclosed事件后覆盖组合框中的文本

时间:2018-06-06 08:03:07

标签: vb.net combobox overwrite

我创建了这段代码来说明这个想法,它使用了一个组合框和一个文本框

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 :(得分:1)

我使用了一些属性和.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

答案 1 :(得分:1)

以下内容应该有效。 如果没有必要,请不要在每个下拉列表中填充组合框,而是在加载COALESCE时调用FillComboBox - 方法。

Form

答案 2 :(得分:0)

您可以解决此问题,将trait PayloadEncryptor[T] { def encrypt(source: T, encrypt: String => String): T } object PayloadEncryptor { def forClass[T](fieldNames: String*)(implicit encryptor: Encryptor[T]): PayloadEncryptor[T] = new PayloadEncryptor[T] { override def encrypt(source: T, encrypt: String => String): T = { encryptor.encryptFields(source, encrypt, fieldNames) } } } 放入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代替SelectedIndexChangedDropDown事件
  • 如果这不是图形问题,请查看DisplayMemberValueMember属性