如何在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。 如果未指定DisplayMember
和ValueMember
属性,则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;" })
`