Code Bye

C# 串口的程序理解,作用是什么

最近学习串口,用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()这种东西
引用 1 楼 Z65443344 的回复:

这不就是给两个下拉列表绑定数据吗
为了让用户能手动选择串口的参数呗
你总不能每次都代码写死吧

那可以使用comboBox4.Items.Add(“1”);来添加下拉列表吗?
还有就是 DataTable dt = new DataTable();
            dt.Columns.Add(“ValueMember”);
            dt.Columns.Add(“DisplayMember”);这些是干啥的(作用)?


5分
这是给DataTable添加了2列,一列用来存放值,一列用来存放显示的文本,然后绑定下拉列表
毕竟你给串口对象设置参数的时候,使用的是枚举,如果你只添加文本而不添加值,那么获取到用户选择的文本之后,还要自己再写分支语句判断一下,再转换成枚举值.那样其实也可以的.
引用 2 楼 Z65443344 的回复:

一般我来做,会直接给控件显示”None”这个字符串,而不是Parity.None.ToString()这种东西

额,这样都可以的,我主要是想知道如果不使用上面两个函数会有什么影响?我试了一下,不使用串口依然能通信啊(且也有下拉列表)!既然是这样,使用以上两个函数就没什么用了。。。。

引用 4 楼 Z65443344 的回复:

这是给DataTable添加了2列,一列用来存放值,一列用来存放显示的文本,然后绑定下拉列表
毕竟你给串口对象设置参数的时候,使用的是枚举,如果你只添加文本而不添加值,那么获取到用户选择的文本之后,还要自己再写分支语句判断一下,再转换成枚举值.那样其实也可以的.

哦,这样啊!我在Load中的确使用了分支语句,难怪感觉这两个函数没什么用了,多谢回答哈!


2分
我自己做串口程序的时候,更习惯直接给下拉列表添加文本,然后在给串口初始化参数的函数里用分支语句转换成枚举赋值
因为我觉得为了俩下拉列表定义俩DataTable怪麻烦的,其实代码量差不多了
反正总归是要有文本和值的对应这个过程的,先对应还是后对应的问题罢了
上面的代码,就是先把文本和值对应,选择之后取出SelectedValue就直接是枚举了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# 串口的程序理解,作用是什么