如何在WinForms和C#中创建下拉菜单

Jay*_*len 10 c# visual-studio-2010 winforms drop-down-menu

我是新手使用Visual Studio/WinForms/C#

我正在尝试创建一个简单的下拉菜单,其中每个值都可以有一个值和一个标签.

如果我正在创建一个Web应用程序,那么我将在HTML中执行此操作.但是我怎么能用C#和WinForms做到这一点?

<select>
<option value="0">Please select One</option>
<option value="1">The first Options</option>
<option value="2">The Second Options</option>
<option value="3">The Third Options</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我尝试过ComboBox,但似乎我不允许添加值和标签,用户仍然可以输入他们想要的任何内容.

我尝试了一个ListBox,但这也不允许我使用值和标签.

Oli*_*bes 18

如果需要值和标题(标签),请创建适当的类

class ComboItem
{
    public int ID { get; set; }
    public string Text { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在ComboBox中,然后将DisplayMember属性设置为Text,将ValueMember属性设置为ID.


DropDownStyle组合框的确定其行为.DropDownStyle.DropDown使用户能够键入文本.随着DropDownStyle.DropDownList用户只能从列表中选择项目.


你可以这样填写ComboBox:

myCombo.DataSource = new ComboItem[] {
    new ComboItem{ ID = 1, Text = "One" },
    new ComboItem{ ID = 2, Text = "Two" },
    new ComboItem{ ID = 3, Text = "Three" }
};
Run Code Online (Sandbox Code Playgroud)

DataSource可以是任何类型的枚举.

您可以像这样检索所选的ID

int id = (int)myComboBox.SelectedValue;
Run Code Online (Sandbox Code Playgroud)

请注意,您可以将任何类型的项添加到ComboBox.如果未指定DisplayMemberValueMember属性,则ComboBox使用ToString对象的方法来确定显示的文本,并且可以通过SelectedItem属性检索所选项(非选定值).

如果你添加这种类型的对象......

class Person
{
    public int PersonID { get; set }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override string ToString()
    {
        return FirstName + " " + LastName;
    }
 }
Run Code Online (Sandbox Code Playgroud)

...对于ComboBox,您可以像这样检索所选项目

Person selectedPerson = (Person)myComboBox.SelectedItem;
int personID = selectedPerson.PersonID;
Run Code Online (Sandbox Code Playgroud)

ComboBox将显示人员的名字和姓氏.


Jua*_*lla 6

您需要为 Combobox 设置数据源,最好创建一个类并传递对象列表,例如:

private void Init()
{
    List<Item> items = new List<Item>();
    items.Add(new Item() { Text = "displayText1", Value = "ValueText1" });
    items.Add(new Item() { Text = "displayText2", Value = "ValueText2" });
    items.Add(new Item() { Text = "displayText3", Value = "ValueText3" });

    comboBox1.DataSource = items;
    comboBox1.DisplayMember = "Text";
    comboBox1.ValueMember = "Value";

}

public class Item
{
    public Item() { }

    public string Value { set; get; }
    public string Text { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

Init()方法放在您的FormName_Load(object sender, EventArgs e){}.


Cul*_*tes 5

看起来该值只是对所选项目的引用,对吗?然后你可以使用组合框的索引,使它变得更容易。

不确定您的项目在构建之前是否已知,如果是,则只需将它们添加到设计器、组合框的属性中。如果没有,那么您可以通过执行以下操作来动态添加它们:

        List<string> items = new List<string>() { "item1", "item2" };
        comboBox1.DataSource = items;
Run Code Online (Sandbox Code Playgroud)

并了解选择了什么项目:

        int index = comboBox1.SelectedIndex;
Run Code Online (Sandbox Code Playgroud)