Visual C#のコーリングシーケンスなど、すぐに忘れるので覚書。
●ネームプレイス
using System.Text.RegularExpressions; // 正規表現 using System.Globalization; // NumberStyles.Integerなど using System.IO.Ports; // シリアルポート関係
●アプリケーション設定に保存
Properties.Settings.Default.comName = "COM1"; // 設定ファイルを更新 Properties.Settings.Default.Save(); // 設定ファイルを保存
アプリケーションのプロパティとして、ユーザ定義の設定ファイルに設定値を保存する。”comName”はデザイナであらかじめ定義されている設定用のプロパティ。
●存在するCOMポートのリストを得る
string[] comPorts = SerialPort.GetPortNames();
●コンボボックスへリストの内容を登録
foreach(string port in comPorts) { comboBox1.Items.Add(port); }
●デリゲート型の”SetTextCallback”オブジェクトを定義
delegate void SetTextCallback(string text);
●デリゲートのインスタンス(シリアル受信イベントハンドラ内で定義)
SetTextCallback d = new SetTextCallback(SetText); textBox1.Invoke(d, new object[] { str });
●コールバックするメソッド
private void SetText(String str) { textBox1.Text = str; }
シリアル受信の際、受信イベントハンドラ内で直接、ビジュアルコンポーネントに文字列などを表示させることはできないため、デリゲートを使用して、表示関数をコールバックさせて、そこで間接的に表示させる。
●10進数、16進数を表すstring変数から数値を得る
// 10進数として解釈 int id = int.Parse(id, NumberStyles.Integer); // 16進数として解釈 int code = int.Parse(score, NumberStyles.HexNumber);
string(文字列)を数値と解釈して数値に変換する。10進数と16進数の例。
●整数値を5桁(D5)の文字列に変換 (カスタム書式指定子)
int src = 1234; label1.Text = scr.ToString("D5");
0パディングの5桁の10進数への変換例。この例では”01234″と表示される。
●現在日時の取得 カスタム書式指定子
// 日付と時間 書式指定なし textBox1.Text = System.DateTime.Now.ToString(); // カスタム書式指定子 textBox2.Text = System.DateTime.Now.ToString("yyMMdd HHmmss");
datetime型を文字列に変換(ToString)する際、ToStringの引数で書式指定可能。数値の場合も同様。
●ストリングの特定範囲の文字列のチェックサムを求める Substring
string cmd = "_P123416\r\n"; // 元文字列 string sumstr = cmd.Substring(1, 7); // 一旦 'P'~'6'までを抽出 int i, cksum = 0; for(i = 0; i < 7; i++) { // 直接cmd[1]~cmd[6]の範囲を加算してもよい cksum += sumstr[i]; // 1文字ずつ加算 } cksum &= 0xFF; // 下位8ビットのみ抽出
意味は異なるが、cmd[0]のようにすれば、擬似的にchar型の配列のように扱うことができる。