ComboBox SelectedText, почему он не переключается на элемент SelectedText? - PullRequest
2 голосов
/ 25 марта 2011

Вопрос:

Мой выпадающий список (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 ]

9 голосов
/ 25 марта 2011

Я думаю, вы неправильно понимаете, что такое свойство SelectedText, обратитесь к документации MSDN .

Свойство SelectedText - это не элемент из списка элементов, это часть редактируемого комбинированного списка, которая выбрана, как если бы вы делали выбор типа копирования / вставки.

Ваш метод SetComboBoxToTextIndex - это правильный способ найти и выбрать элемент в списке. В качестве альтернативы, если ваш ComboBoxItem правильно реализует Equals, вы можете найти соответствующий экземпляр и установить свойство SelectedItem.

5 голосов
/ 28 марта 2012

Этот код будет делать то, что вы хотите легко.;)

myList.SelectedIndex = myList.FindString(myText);
1 голос
/ 25 марта 2011

ComboBox.SelectedText эквивалентно TextBox.SelectedText, т. Е. Оно определяет текст, выделенный внутри текстового поля комбинированного списка.Это не меняет SelectedItem, потому что у него совершенно другая семантика.

0 голосов
/ 17 июня 2019

Если элемент имеет тип объекта Вы можете использовать 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" };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...