2

现在,为了确保我得到了我想要的东西

actionComboBox.Items[actionComboBox.SelectedIndex].ToString()

检索存储为我的项目的字符串TextBox

Selected 属性之一是否返回我的上述声明?当我使用它们时,我似乎永远无法得到我想要的东西。

像,是否actionComboBox.SelectedItem as string返回上述值?

编辑:

我想这里真正的问题是:每个 Selected Property 返回什么,例如;SelectedItem, SelectedValue, SelectedText.

4

2 回答 2

2

SelectedText如果您能够编辑组合框中的文本,我认为返回选定的文本。DropDownList如果您选择了用户不能只在组合框中键入值的样式,我认为您不会使用此属性。

SelectedValue仅当您绑定到数据源时才适用。SelectedValue将返回您选择的数据源中的项目,或者如果您已DisplayMember填写该字段,则返回您指定的属性/列的值。

SelectedItem如果您刚刚通过设计器填写了列表项,则将返回所选项目。

我一直被这些烧伤,因为我总是忘记。您的示例中的大问题是如何将项目填充到组合框中,这将影响这些属性的返回值。

于 2012-05-10T18:22:47.703 回答
1

ComboBox.ItemsSystem.Object's 的集合,所以它可以是任何东西。默认情况下,ComboBox显示对象ToString方法的返回值。无论你添加ComboBox什么,你都会得到什么,尽管它作为 a 返回System.Object,你必须将它转换回它的原始类型才能访问它的成员。

comboBox.Items.Add("foo");

以上将添加System.StringComboBox.

class Foo
{
    public String Bar { get; set; }
}

Foo foo = new Foo();
foo.Bar = "Value";

comboBox.Items.Add(foo);

以上将添加FooComboBox. 所以要找回你的价值观。

Object obj = comboBox.Items[comboBox.SelectedIndex];
Foo foo = obj as Foo;

if (foo != null) { // check just in case
}

对于字符串,不需要转换,调用ToString就可以了。最好只使用SelectedItem

Foo foo = comboBox.SelectedItem as Foo;
if (foo != null) { // again, check to make sure
}

的强大之处ComboBox在于,由于它存储了 的集合System.Object,因此您可以存储多种类型的对象,但是当您需要访问它时,您负责将其转换回最初的可用类型。

于 2012-05-10T17:55:32.837 回答