ComboBox.SelectedText无法获取所选文本

69

我正在构建一个字符串,代码如下:

String status = "The status of my combobox is " + comboBoxTest.SelectedText

我正在使用VS2010中的WinForm

结果看起来像:

"我的组合框的状态为"


1
当焦点离开时,ComboBox控件将失去选择。 - Viacheslav Smityukh
11个回答

116

我认为您想使用

String status = "The status of my combobox is " + comboBoxTest.Text

MSDN中得到的SelectedText属性:

获取或设置ComboBox可编辑部分中所选文本。

而从MSDN中得到的Text属性:

获取或设置与此控件关联的文本。


1
那与comboBoxTest.SelectedItem.ToString()有何不同之处? - Cocoa Dev
3
@CocoaDev:SelectedItem是一个对象,也可能是一个类,因此将其转换为字符串可能不是您需要的。当您填充下拉框时,可以将项设置为类,因此观察SelectedItem后,您可以根据需要进行操作... - Marco
SelectedItem是用于当您具有与ComboBox相关联的某种绑定(DataSource)时。它将是一个对象,但可以将其转换为ComboBox绑定的基础数据(对象)类型。 - SPFiredrake

19

根据文档

你可以使用SelectedText属性来检索或更改ComboBox控件中当前选定的文本。但是,你需要知道由于用户交互而导致选择可以自动更改。例如,如果在按钮单击事件处理程序中检索SelectedText值,则该值将为空字符串。这是因为当输入焦点从组合框移动到按钮时,选择会自动清除。

当组合框失去焦点时,选择点移动到文本开头,并取消选择任何选定的文本。在这种情况下,获取SelectedText属性会检索一个空字符串,设置SelectedText属性会将指定的值添加到文本开头。


12

我在5分钟前遇到了这个问题。

我认为(使用Visual Studio 2005)的解决方法是:

myString = comboBoxTest.GetItemText(comboBoxTest.SelectedItem);

如果我错了,请原谅我。


没错!当我们将一个类设置为数据源时,很普遍的问题是获取其文本,这对我解决了。 - Dvd Franco
能否给个+10? ;) 这是提取文本的唯一方法。而且我也从VBA中提取它的方式! - Marcelo Scofano Diniz

11

我认为你不需要SelectedText,但也许你需要

String status = "The status of my combobox is " + comboBoxTest.Text;

5

之前的回答都解释了原帖应该做什么,我来解释一下 .SelectedText 属性是什么。

.SelectedText 属性不是 combobox 中的文本,而是被高亮的文本。它与 textbox.SelectedText 属性相同。

下面的图片显示了 .SelectedText 属性将等于 "ort"。

enter image description here


4
尝试这样做: String status = "我的组合框状态是:" + comboBoxTest.text;
(这段代码用于获取组合框的文本并将其与指定字符串拼接)

4
要获取选定的项目,您需要使用comboBox的SELECTEDITEM属性。由于它是一个Object对象,如果您要将其分配给字符串,则必须使用ToString()方法进行转换:
string myItem = comboBox1.SelectedItem.ToString(); //this does the trick

3
以下是我的解决方案,假设您想更改标签的文本:

以下是我的解决方案,假设您想更改标签的文本:

    private void comboBoxtest_SelectedIndexChanged(object sender, EventArgs e)
    {
        var combotext = comboBoxtest.Text;
        var status = "The status of my combo box is" + combotext;
        label1.Text = status;
    }

2
如果您将ComboBox绑定到类似于KeyValuePair的内容上,构造函数中包含属性,如下所示...:
 DataSource = dataSource,
 DisplayMember = "Value",
 ValueMember = "Key"

所以dataSource是键值对类型...

最终你需要做的是...

  string v = ((KeyValuePair)((ComboBox)c).SelectedItem).Value;

我有一个动态表单 - 其中cControl类型 - 所以必须将其转换为ComboBox。

最初的回答:

我有一个动态表单,其中 c 是 Control 类型,所以必须将其强制转换为ComboBox。


1
如果你只想要知道带有可编辑文本框的ComboBox(或者ComboBoxStyle.DropDown风格)中的文本,你可以使用以下代码:
string str = comboBox.SelectedItem != null ?
                      comboBox.GetItemText(comboBox.SelectedItem) : comboBox.Text;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接