【问题标题】:Change Combobox via Textbox Input VB.NET通过文本框输入 VB.NET 更改组合框
【发布时间】:2012-03-10 06:00:05
【问题描述】:

您好,我需要一些帮助...在我在文本框中输入代表组合框值的代码后,如何更改组合框的显示成员??

例子

代码:02-001 组合框:提供者 X

如果我更改代码,则提供程序组合框必须更改,如果我更改提供程序组合框,代码应该更改!..我没有找到任何帮助..这是我记得的小代码

if e.keychar = chr(13) Then
    combobox.valuemember = textbox.text
    combobox.displaymember = me.stockdataset.selectprovider(@textbox.text)
end if

此代码更改组合框显示成员,但如果我通过单击它来更改组合框,则文本框上的代码不会更改为相应的代码...?? 请帮忙

....组合框绑定到提供程序表....

【问题讨论】:

    标签: vb.net binding combobox textbox


    【解决方案1】:

    当用户按下回车键时更改组合框的 selectedItem。但在此之前,请检查它是否确实在提供程序列表中...

    在组合框的 SelectionChanged 处理程序中,将文本框内容设置为组合框的值。

    最好每次使用使用 propertychanged 的​​属性,并将文本框和组合框的 selectedItem 绑定到这些属性。

    【讨论】:

    • 所以 SelectedItems 是绑定控件的值
    【解决方案2】:

    这是错误的绑定方式....这是你的做法: 我已经通过一个带有组合框和文本框的简单表单来模拟您的案例 和一个包含 2 列“代码”和“描述”的数据表

    这里是代码(如果您愿意,请不要忘记将我的答案标记为正确):

    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
    
                Me.KeyPreview = True'To Enable the Key events : KeyDown, KeyPress and KeyUp
    
                Dim dt As New DataTable("T")
                dt.Columns.Add(New DataColumn("Code"))
                dt.Columns.Add(New DataColumn("Description"))
                For i = 1 To 10
                    Dim r As DataRow = dt.NewRow
                    r("Code") = "Code" + CStr(i)
                    r("Description") = "Desc" + CStr(i)
                    dt.Rows.Add(r)
                Next
    
                With ComboBox1
                    .ValueMember = "Code" ' This is case sensitive 
                    .DisplayMember = "Description" ' This is case sensitive 
                    .DataSource = dt
                End With
    
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
            SetComoboValue()
        End Sub
    
        Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
            If e.KeyCode = Keys.Enter Then SetComoboValue()
        End Sub
    
        Private Sub SetComoboValue()
            Try
                If Not String.IsNullOrEmpty(TextBox1.Text) Then
                    ComboBox1.SelectedValue = TextBox1.Text
                End If
            Catch ex As Exception
                MsgBox("Ooops, Invalid code !!!")
            End Try
        End Sub
    End Class
    

    所以当你输入"Code3"并回车或点击TextBox1时,ComboBox1会显示"Desc3"

    【讨论】:

    • ooooooooooooooooooooooooooooooooooooooooo 谢谢这真的很有帮助,只是一个问题,为什么我的组合框似乎扰乱了提供者?正常吗?这就是答案的唯一原因
    • 我不知道您的提供者数据表中有什么查询(或其他内容),可以说它的“选择代码,来自提供者的描述”以使其排序,只需使其“选择代码,来自提供者的描述 ORDER”按描述"
    • 好吧,我直接从提供程序表绑定到组合框,不确定这是否是它看起来混乱的原因,但现在没关系:D 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多