ComboBox SelectedText,为什么不切换到SelectedText项?

时间:2011-03-25 15:06:49

标签: c# vb.net winforms combobox

问题:

如果我使用

,我的组合框(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:”?

4 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:5)

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

myList.SelectedIndex = myList.FindString(myText);

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果该项目属于对象类型,则可以使用 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" };