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

标签 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:"?

最佳答案

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

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

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

关于c# - ComboBox SelectedText,为什么不切换到SelectedText项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434310/

相关文章:

c# - NUnit TestFixure 和 SetUp 的嵌套 TransactionScope

c# - 如何在 PropertyGrid 中显示静态(共享)对象的属性?

.net - 如何以编程方式判断 Word 宏是否是从 VB.Net/C# 签名的

.net - 如何在多个项目中使用我的类(class)?

c# - 如何避免每次启动程序而不是一次生成 Sqlite DB

c# - 在哪里可以找到 ASP.NET Core MVC 中的模型绑定(bind)错误?

c# - 从 ControlTemplate By Name 在代码中获取控制权

c# - 协助持续进行 Java 到 C# 转换的工具

c# - 将子控件 MouseMove 事件无缝转发给父控件

c# - 启用调整 Windows Forms 窗体的大小