我有一个程序,用户可以选择串口,波特率和奇偶校验位来建立串行通信。
奇偶校验位是从组合框中选择的(无、奇、偶)。
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;
}这段代码运行得很好,但是有没有更简单的方法来解决这个问题。谢谢。
发布于 2018-02-05 21:48:06
如果您用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填充它。第一个更健壮。如果您使用自定义枚举执行此操作,您将在将来合并这些更改。如果您很快决定向其添加值,您的combobox将自动扩展。
发布于 2018-02-05 21:43:39
如果您能够更改枚举的定义
public enum Parity { Even = 2, Odd = 1, None = 0 }您可以通过以下方式转换结果
port.Parity = (Parity)comboBox1.SelectedIndex;https://stackoverflow.com/questions/48623847
复制相似问题