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

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

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

如果我正在创建一个Web应用程序,这就是我在HTML中所做的。 但是我怎么能用C#和WinForms做到这一点?

 Please select One The first Options The Second Options The Third Options  

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

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

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

 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将显示人员的名字和姓氏。

看起来这个值只是对所选项目的引用,对吗? 然后你可以使用combobox的索引,使它更容易。

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

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

并知道选择了什么项目:

  int index = comboBox1.SelectedIndex; 

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

 private void Init() { List items = new List(); 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){}

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

那是:

  public class ItemDisplay { 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; } } 

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

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

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

  List items = new List(); 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;" }) 

`