按照「夏夜星語」 的模板進行修改

2022-05-01 12:18:09 字數 4062 閱讀 6125

在窗體上新增三個「groupbox」控制項,分別將窗體分為「串列埠設定」、「資料接收」以及「資料傳送」三部分。

新增若干「label」和「combobox」分別用於串口號、波特率、停止位、奇偶校驗、資料位等的設定;

新增兩個「rodiobutton」用於字元顯示和hex顯示(hex=16進製制)的選擇;

新增若干「button」用於串列埠檢測、開啟串列埠、清空資料以及傳送資料等功能按鈕;

最後分別在資料接收欄和資料傳送欄中各新增乙個「textbox」控制項,用於資料的收發。

對各個布置好的控制項進行命名,方便程式設計。(按下圖紅色字型進行命名)

此外,還需更改以下屬性:更改「字元顯示」的rodiobutton控制項屬性中的checked為true,使在開啟程式後預設選擇「字元顯示」。

更改資料接收欄中的textbox控制項屬性中的readonly為true,使這個空間只能顯示接收到的資料,不能被編輯。

更改窗體form屬性中的acceptbutton為btnsend(傳送資料按鈕的名稱),使在窗體下按下回車鍵關聯「傳送資料」按鈕。

按照「夏夜星語」 的模板進行修改

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.threading.tasks;

using system.windows.forms;

using system.io.ports;

namespace 夏夜星語

/*private void label4_click(object sender, eventargs e)

*/private void form1_load(object sender, eventargs e)

cbxcomport.selectedindex = 0;

//列出常用的波特率

cbxbaudrate.items.add("1200");

cbxbaudrate.items.add("2400");

cbxbaudrate.items.add("4800");

cbxbaudrate.items.add("9600");

cbxbaudrate.items.add("19200");

cbxbaudrate.items.add("38400");

cbxbaudrate.items.add("43000");

cbxbaudrate.items.add("56000");

cbxbaudrate.items.add("57600");

cbxbaudrate.items.add("115200");

cbxbaudrate.selectedindex = 5;

//列出停止位

cbxstopbits.items.add("0");

cbxstopbits.items.add("1");

cbxstopbits.items.add("1.5");

cbxstopbits.items.add("2");

cbxstopbits.selectedindex = 1;

//列出資料位

cbxdatabits.items.add("8");

cbxdatabits.items.add("7");

cbxdatabits.items.add("6");

cbxdatabits.items.add("5");

cbxdatabits.selectedindex = 0;

//列出奇偶校驗位

cbxparity.items.add("無");

cbxparity.items.add("奇校驗");

cbxparity.items.add("偶校驗");

cbxparity.selectedindex = 0;

//預設為hex顯示

rbnhex.checked = true;

}///

/// 檢測哪些串列埠可用

///

///

///

private void btncheckcom_click(object sender, eventargs e)

catch (exception)

}if (comexistence)

else

}///

/// 串列埠檢查按鈕:檢查串列埠是否設定

///

private bool checkportsetting()

///

/// 檢查是否傳送資料

///

///

private bool checksenddata()

///

/// 設定串列埠的屬性:停止位、資料位、奇偶校驗位

///

private void setportproperty()

else if (f == 1.5)

else if (f == 1)

else if (f == 2)

else

sp.databits = convert.toint16(cbxdatabits.text.trim());//設定資料位

string s = cbxparity.text.trim();//設定奇偶校驗位

if (s.compareto("無") == 0)

else if (s.compareto("奇校驗") == 0)

else if (s.compareto("偶校驗") == 0)

else

sp.readtimeout = -1;//設定超時讀取時間

sp.rtsenable = true;

//定義datareceived事件,當串列埠收到資料後觸發事件

sp.datareceived += new serialdatareceivedeventhandler(sp_datareceived);

sp.receivedbytesthreshold = 1;

//必須一定要加上這句話,意思是接收緩衝區當中如果有乙個位元組的話就觸發接收函式,

//如果不加上這句話,那就有時候觸發接收,有時候都觸發了好多次了也沒有觸發接收,

//有時候延時現象等等,

if (rbnhex.checked)

else

}///

/// 傳送串列埠資料

///

///

///

private void btnsend_click(object sender, eventargs e)

catch (exception)

}else

if (!checksenddata())//檢測要傳送的資料

}///

/// 串列埠狀態檢測:是否設定、是否占用

///

///

///

private void btnopencom_click(object sender, eventargs e)

if (!issetproperty)//串列埠未設定則設定串列埠

try//開啟串列埠

catch (exception)

}else

catch (exception)}}

private void sp_datareceived(object sender, serialdatareceivedeventargs e)

else

tbxrecvdata.text += recvdatatext;

}// sp.discardinbuffer();//丟棄接收緩衝區資料

}));

}private void btncleandata_click(object sender, eventargs e)}}