|
最近学习串口,用C#写了一个简单的串口通信界面,功能虽然实现了,但有些程序还是不太懂,主要是不知道功能是什么,代码如下:
void BindParity()//校验位
{
DataTable dt = new DataTable();
dt.Columns.Add("ValueMember");
dt.Columns.Add("DisplayMember");
for (int i = 0; i < 3; i++)
{
DataRow dr = dt.NewRow();
if (((int)Parity.None).Equals(i))//转换为int型数值,并判断是否与i值相同
{
dr[0] = (int)Parity.None;
dr[1] = Parity.None.ToString();//00
}
if (((int)Parity.Odd).Equals(i))
{
dr[0] = (int)Parity.Odd;
dr[1] = Parity.Odd.ToString();//11
}
if (((int)Parity.Even).Equals(i))
{
dr[0] = (int)Parity.Even;
dr[1] = Parity.Even.ToString();//22
}
dt.Rows.Add(dr);
}
comboBox3.DataSource = dt;
comboBox3.DisplayMember = "DisplayMember";
comboBox3.ValueMember = "ValueMember";
comboBox3.SelectedIndex = 0;
}
void stopbits() //停止位
{
DataTable dt = new DataTable();
dt.Columns.Add("ValueMember");
dt.Columns.Add("DisplayMember");
for (int i = 0; i < 4; i++)
{
DataRow dr = dt.NewRow();
if (((int)StopBits.None).Equals(i))
{
dr[0] = (int)StopBits.None;
dr[1] = StopBits.None.ToString();//0 None
}
if (((int)StopBits.One).Equals(i))
{
dr[0] = (int)StopBits.One;
dr[1] = StopBits.One.ToString();//1 One
}
if (((int)StopBits.Two).Equals(i))
{
dr[0] = (int)StopBits.Two;
dr[1] = StopBits.Two.ToString();//2 Two
}
if (((int)StopBits.OnePointFive).Equals(i))
{
dr[0] = (int)StopBits.OnePointFive;
dr[1] = StopBits.OnePointFive.ToString();//3 OnePointFive
}
dt.Rows.Add(dr);
}
comboBox4.DataSource = dt;
comboBox4.DisplayMember = "DisplayMember";
comboBox4.ValueMember = "ValueMember";
comboBox4.SelectedIndex = 1;
}
以上代码是我从相关串口实例上看到的,我感觉C#写串口不需要调用这些函数啊!可为什么有些(很多)的例子中都调用了这两个函数,这两个函数的作用是什么??? |
|
5分 |
这不就是给两个下拉列表绑定数据吗
为了让用户能手动选择串口的参数呗 你总不能每次都代码写死吧 |
5分 |
一般我来做,会直接给控件显示”None”这个字符串,而不是Parity.None.ToString()这种东西
|
|
那可以使用comboBox4.Items.Add(“1”);来添加下拉列表吗? |
|
5分 |
这是给DataTable添加了2列,一列用来存放值,一列用来存放显示的文本,然后绑定下拉列表
毕竟你给串口对象设置参数的时候,使用的是枚举,如果你只添加文本而不添加值,那么获取到用户选择的文本之后,还要自己再写分支语句判断一下,再转换成枚举值.那样其实也可以的. |
|
额,这样都可以的,我主要是想知道如果不使用上面两个函数会有什么影响?我试了一下,不使用串口依然能通信啊(且也有下拉列表)!既然是这样,使用以上两个函数就没什么用了。。。。 |
|
|
哦,这样啊!我在Load中的确使用了分支语句,难怪感觉这两个函数没什么用了,多谢回答哈! |
|
2分 |
我自己做串口程序的时候,更习惯直接给下拉列表添加文本,然后在给串口初始化参数的函数里用分支语句转换成枚举赋值
因为我觉得为了俩下拉列表定义俩DataTable怪麻烦的,其实代码量差不多了 |
|
反正总归是要有文本和值的对应这个过程的,先对应还是后对应的问题罢了
上面的代码,就是先把文本和值对应,选择之后取出SelectedValue就直接是枚举了 |
|