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

时间:2014-12-31 16:26:03

标签: c# winforms visual-studio-2010 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>

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

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

5 个答案:

答案 0 :(得分:17)

如果您想要一个值和一个标题(标签),请创建一个合适的类

class ComboItem
{
    public int ID { get; set; }
    public string Text { get; set; }
}

在ComboBox中,您可以将DisplayMember属性设置为Text,将ValueMember属性设置为ID


ComboBox的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" }
};

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

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

int id = (int)myComboBox.SelectedValue;

请注意,您可以将任何类型的项添加到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;
    }
 }

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

Person selectedPerson = (Person)myComboBox.SelectedItem;
int personID = selectedPerson.PersonID;

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

答案 1 :(得分:4)

似乎值只是对所选项目的引用,对吗?然后你可以使用组合框的索引,使它更容易。

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

        List<string> items = new List<string>() { "item1", "item2" };
        comboBox1.DataSource = items;

要知道选择了哪个项目:

        int index = comboBox1.SelectedIndex;

答案 2 :(得分:4)

您需要为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; }
}

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

答案 3 :(得分:0)

ComboBox显示ToString调用的结果返回值,因此您可以定义一个包含值并显示文本的Display类,并将其添加到组合框中。

那是:

 public class ItemDisplay<TValue>
 {
     private readonly string m_displayText;

     public ItemDisplay(TValue value, String displayText)
    {
        this.Value = value;
        m_displayText = displayText;
    }

    public TValue Value { get; set; }

    public override string ToString()
    {
        return m_displayText;
    }
}

并将项目添加到您的组合框中,如下所示:

 comboBox1.Items.Add(new ItemDisplay<int>(1, "FirstValue"));
 comboBox1.Items.Add(new ItemDisplay<int>(2, "Second"));
 comboBox1.Items.Add(new ItemDisplay<int>(3, "Third"));

答案 4 :(得分:-1)

要在控制器中创建下拉列表,请使用get方法中的selectlistitem。 同样你也需要在post方法中使用paas。

            List<SelectListItem> items = new List<SelectListItem>();
            items.Add(new SelectListItem
            {
                Text = "car",
                Value = "car"
            });


            ViewBag.List = new SelectList(items, "Text", "Value");

在视图中,您需要传递下拉列表。

   @Html.DropDownList("option", (ViewBag.List as SelectList), "Select", new { @style ="padding:5.5px;margin-bottom:8px;margin-right:-5px;" })

`