【问题标题】:ComboBox SelectedText, why is it not switching to the SelectedText item?ComboBox SelectedText,为什么不切换到SelectedText项?
【发布时间】:2011-07-23 00:03:09
【问题描述】:

问题:

如果我使用,我的组合框 (Me.cbHomeDrive) 无法正确初始化

Me.cbHomeDrive.SelectedText = "E:"

在 Form_Load 上:

For i As Integer = AscW("C"c) To AscW("Z"c) Step 1
      Me.cbHomeDrive.Items.Add(New ComboBoxItem(ChrW(i) + ":"))
Next

Me.cbHomeDrive.SelectedIndex = 26 - 3
Me.cbHomeDrive.Enabled = False

ComboBoxItem 类为:

Public Class ComboBoxItem
    Public Text As String
    Public ID As String

    Public Sub New(ByVal strText As String)
        Text = strText
        ID = strText
    End Sub

    Public Sub New(ByVal strText As String, ByVal strID As String)
        Text = strText
        ID = strID
    End Sub


    Public Overrides Function ToString() As String
        Return Text
    End Function
End Class

如果我这样做了

Me.cbHomeDrive.SelectedText = "E:"

紧接着

Me.cbHomeDrive.Enabled = False

然后什么都没有发生,组合框显示为 Z:。

如果不是

Me.cbHomeDrive.SelectedText = "E:"

我用

SetComboBoxToTextIndex(Me.cbHomeDrive, "E:")

' WTF '
' http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectedtext.aspx '
Sub SetComboBoxToTextIndex(ByVal cbThisComboBox As ComboBox, ByVal strItemText As String)

    For i As Integer = 0 To cbThisComboBox.Items.Count - 1 Step 1
        If StringComparer.OrdinalIgnoreCase.Equals(cbThisComboBox.Items(i).ToString(), strItemText) Then
            cbThisComboBox.SelectedIndex = i
            Exit For
        End If
    Next

End Sub

然后它设置正确的选定项 (E:)。

为什么它不适用于 Me.cbHomeDrive.SelectedText = "E:"?

【问题讨论】:

    标签: c# vb.net winforms combobox


    【解决方案1】:

    我认为您误解了SelectedText 属性是什么,请参阅MSDN documentation

    SelectedText 属性不是项目列表中的项目,它是被选中的可编辑组合框的一部分,就像您在进行复制/粘贴类型的选择一样。

    您的SetComboBoxToTextIndex 方法是在列表中查找和选择项目的正确方法。或者,如果您的 ComboBoxItem 正确实现了Equals,您可以找到合适的实例并设置SelectedItem 属性。

    【讨论】:

    • 废话,你是对的。当“一个”只读取第一个模棱两可的段落时,就会发生这种情况。当一个人也阅读所有其他内容时,它会变得更加清晰。非常模糊的属性。
    • @Daniel Hilgarth:不,我也支持你。我通常给第一个打勾,但在这种情况下,CodingGorilla 的答案只是表达得更好。
    【解决方案2】:

    此代码将轻松完成您想要的操作。 ;)

    myList.SelectedIndex = myList.FindString(myText);
    

    【讨论】:

      【解决方案3】:

      ComboBox.SelectedText 等价于TextBox.SelectedText,即它指定在组合框的文本框中选择的文本。它不会改变 SelectedItem,因为它具有完全不同的语义。

      【讨论】:

        【解决方案4】:

        如果项目是对象类型你可以使用SelectedItem

        ComBaudRate.ValueMember = "Value";
        ComBaudRate.DisplayMember = "Text";
        string[] baudValues = {"1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200"};
        ComBaudRate.Items.Clear();
        for(var idx = 0; idx < baudValues.Length; idx++)
        {
             ComBaudRate.Items.Add(new { Text = baudValues[idx], Value = baudValues[idx] });
        }    
        ComBaudRate.SelectedItem = new { Text = "19200", Value = "19200" };
        

        【讨论】:

          猜你喜欢
          • 2018-10-06
          • 1970-01-01
          • 2012-04-11
          • 1970-01-01
          • 1970-01-01
          • 2012-04-28
          • 1970-01-01
          • 2011-01-15
          • 2017-10-04
          相关资源
          最近更新 更多