【问题标题】:selecting value from a programmatically created combobox in vb.net从 vb.net 中以编程方式创建的组合框中选择值
【发布时间】:2017-12-25 02:05:43
【问题描述】:

我在一个面板中创建了一系列组合框,我可以毫不费力地使用数据库中的正确值填充每个组合框,但我无法提取(放入变量)我在何时选择的值单击任何组合框。我尝试了几件事无济于事。我在另一个使用列表的站点上查看了某人提出的解决方案,但这要么不适用于我的问题,要么我不理解它。任何帮助,将不胜感激。我已经为此苦苦挣扎了好几个星期。非常感谢!

这是我的代码的相关部分:

Private Sub llenaPanelKeywords()

      Try

            combokywrd = New System.Windows.Forms.ComboBox
            combokywrd.Left = kywrdLabel.Left + kywrdLabel.Width + 1
            combokywrd.Top = 10 + SaltoDeFilaKeywords * 30 
            combokywrd.Width = 81
            combokywrd.Height = 25
            combokywrd.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))

            PanelKywrds.Controls.Add(combokywrd)

            combokywrd.Name = kwDataTable.Rows(kwRowPosition)("IdKeyword").ToString()

            'the combo gets populated only upon clicking on it:
            AddHandler combokywrd.Click, AddressOf combokywrd_click

        SaltoDeFilaKeywords = SaltoDeFilaKeywords + 1

    Catch ex As Exception
        MessageBox.Show("falla en llenar panel keywords " & ex.Message)
    End Try

End Sub

Private Sub combokywrd_click(sender As Object, e As EventArgs) Handles combokywrd.Click

    Try

        Dim combokywrd As ComboBox = CType(sender, ComboBox)

        idKeywordSelect = combokywrd.Name.ToString()

                    combokywrd.DataSource = Nothing 'por alguna razón antes de poner esto, fallaba al llenar uno de los combos, pero no los demás (largo total)

        combokywrd.Items.Clear()

        Dim stringSQLValorKywrd = "SELECT DISTINCT valorKeyword FROM [TOOLTOWERDbase].[dbo].[articuloKeyword] WHERE idKeyword = " & idKeywordSelect 


        Dim cmd As New SqlCommand(stringSQLValorKywrd, con)
        cmd.CommandType = CommandType.Text
        Dim sda As New SqlDataAdapter(cmd)
        Dim dtVK As New DataTable()
        sda.Fill(dtVK)

        combokywrd.DataSource = dtVK
        combokywrd.DisplayMember = "valorkeyword"
        lstCombos.Add(combokywrd)


        combokywrd.Tag = combokywrd.Name

        AddHandler (combokywrd.SelectedValueChanged), AddressOf combokywrd_SelectedValueChanged 

    Catch ex As Exception
        MessageBox.Show("carga valoresKeyword falló " & ex.Message)
    End Try

End Sub


Private Sub combokywrd_SelectedValueChanged(sender As Object, e As EventArgs) Handles combokywrd.SelectedValueChanged

    'I cannot go beyond populating the comboboxes:
    'I have tried with selectedindexchanged as well


    MessageBox.Show(combokywrd.SelectedText.ToString()) 'shows blank

    Dim cb As ComboBox = DirectCast(sender, ComboBox)

    MsgBox(cb.SelectedValue.ToString()) 'shows System.Data.DataRowView

    MsgBox("combobox’s tag: " & cb.Tag.ToString()) 'it shows the correct tag

    Dim tempString = combokywrd.Items(combokywrd.SelectedValue).ToString  'value of ‘0’ is not valid for index

End Sub

【问题讨论】:

  • SelectedText 可能不是你想的那样。该事件是SelectedValueChanged,所以请尝试检查SelectedValue
  • @Plutonix:那里不应该有 SelectedText,谢谢。

标签: sql-server vb.net combobox


【解决方案1】:
MsgBox(cb.SelectedValue.ToString()) 'shows System.Data.DataRowView

你得到了值,但你没有在组合框中放一个字符串,而是放了一整行。 (因为你绑定到一个表,而不是一个列表。)尝试 cb.SelectedValue[0].ToString(),如果这不起作用,在行上放一个断点,转到立即窗口(ctrl+g) ,键入 cb.SelectedValue。看看在第二个“.”之后会出现什么选项,你会发现那里有一些东西可以让你得到行的想要的字段而不是整行。

【讨论】:

  • 用括号加上零就可以了。非常感谢你。不过,我现在又遇到了另一个错误;即当我尝试从组合框中更改我的选择时,我收到错误“对象变量或块变量未设置错误”。我想我需要重置一些东西,但我还没弄清楚是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多