【发布时间】:2017-12-15 13:46:51
【问题描述】:
有没有一种简单的方法可以只解析组合框中的数字值而无需创建 ComboBox 类?我当前的组合框有 2 个选项:“0(否)”和“1(是)”
我以前用过
double comboValue = double.Parse(cmbValue.Text);
但是现在我遇到了错误,因为我在每个选项中都添加了“是”和“否”。
【问题讨论】:
标签: c# winforms visual-studio combobox
有没有一种简单的方法可以只解析组合框中的数字值而无需创建 ComboBox 类?我当前的组合框有 2 个选项:“0(否)”和“1(是)”
我以前用过
double comboValue = double.Parse(cmbValue.Text);
但是现在我遇到了错误,因为我在每个选项中都添加了“是”和“否”。
【问题讨论】:
标签: c# winforms visual-studio combobox
我通常是这样做的:
List<KeyValuePair<int, string>> items = new List<KeyValuePair<int,string>>();
items.Add(new KeyValuePair<int, string>(0, "NO"));
items.Add(new KeyValuePair<int, string>(1, "YES"));
comboBox1.DataSource = items;
comboBox1.DisplayMember = "value";
comboBox1.ValueMember = "key";
然后,当您需要获取选定的值时,只需:
int selItem = (int)comboBox1.SelectedValue;
如果你选择“NO”返回0,如果你选择“YES”返回1
【讨论】:
您需要使用SelectedValue 属性而不是.Text
double comboValue = double.Parse(cmbValue.SelectedValue.ToString());
如果您不想创建类并且组合框只有两个值,那么您可以简单地编写一个 if 条件。
double comboValue;
if(cmbValue.Text == "0 (No)")
comboValue = 0;
else
comboValue = 1;
【讨论】:
ToString 实现的对象——尽管 OP 说出于某种原因他宁愿不这样做。
在您的情况下,您可以简单地使用组合框的 SelectedIndex 属性,而不是尝试解析文本或转换对象(我猜这是字符串或具有 ToString() 实现的某个对象)。
请注意,我假设您不希望在某些时候出现非整数值(即 0.5“也许”)。
【讨论】:
另一种方法是在“字符串”类上使用扩展方法,如下所示:
public static class ExtensionTest
{
public static int ToComboNumber(this string input)
{
if (input == "Yes")
return 1;
else
return 0;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int number = comboBox1.Text.ToComboNumber();
MessageBox.Show(number.ToString());
}
}
扩展方法也适用于枚举和布尔值。 请注意类和方法上的“静态”关键字。
【讨论】: