我有一个程序,用户可以选择comport,波特率和奇偶校验位来建立串行通信。
从组合框(无,奇数,偶数)中选择奇偶校验位。
int Parity = comboBox1.SelectedIndex;
switch (Parity) //Parity
{
case 0:
port.Parity = Parity.None;
break;
case 1:
port.Parity = Parity.Odd;
break;
case 2:
port.Parity = Parity.Even;
break;
}
这段代码工作正常,但是有一种更简单的方法可以解决这个问题。谢谢。
答案 0 :(得分:3)
如果使用类型Parity
的值填充组合框。例如:
comboBox1.DataSource = Enum.GetValues(typeof(System.IO.Ports.Parity));
然后你可以使用SelectedItem属性,因为它保存了相应类型System.IO.Ports.Parity
的值!然后简单地转换SelectedItem
,分配它并且开关/案例变得过时:
port.Parity = (System.IO.Ports.Parity)comboBox1.SelectedItem;
如果您没有使用原始枚举来填充组合框,那么这种方法将无效。
如果你在这个例子中使用了简单的string
:
comboBox1.Items.Add("None");
comboBox1.Items.Add("Odd");
comboBox1.Items.Add("Even");
comboBox1.Items.Add("Mark");
comboBox1.Items.Add("Space");
您可以Parse
将它们放入枚举值中,然后进行转换:
port.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox1.SelectedItem.ToString());
我不建议使用string
填充第二种方法。第一个更强大。如果您使用自定义枚举枚举,则将在以后合并更改。如果您很快决定为其添加值,则组合框将自动扩展。
答案 1 :(得分:1)
如果您能够更改枚举的定义
public enum Parity { Even = 2, Odd = 1, None = 0 }
您可以按
投射结果port.Parity = (Parity)comboBox1.SelectedIndex;