我是使用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,但这也不允许我使用值和标签。
答案 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。如果您未指定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将显示人员的名字和姓氏。
答案 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;" })
`