Visual C# 覚書

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型の配列のように扱うことができる。


コメントは受け付けていません。