#VB.NETの備忘録
FORM のイベント
Actived
公式ドキュメントにはフォームがアクティブになった際に発火するとなっているが
アクティブとは何か気になったのでちょっと調べてみました。
アクティブになる条件の仮説
① 画面に表示される
② フォーム内をクリックされる
③ フォーム内のコントロールにフォーカスされる
④ フォーム内の関数が呼び出される
結果としては④以外は発火しました。
文字列操作
文字列の途中で改行する
Enviroment.NewLine
0埋め
-
Strings.Formatを利用する
Format(“{0:000}”, isn’t) => 3桁で0埋め
上記方法はString型には使えない -
String.PadLeft(3, “0”c)
ADO.NETでのSQL発行
- 発行するSQLに「;」をつけてはいけない
発行されているSQLを実行するとエラーにならないのに、
システムを実行するとエラーになるのはなぜ、、、と悩まされた
コントローラ関連
コントロールを探す
Me.Controls.Find("TextBox1", True)
コンボボックス
- コンボボックスに表示する値と裏で持つ値を分ける
① コンボボックスに独自クラスを追加する。
Items.addで追加する場合
comboBox.items.add(hogeClass)
コンボボックスの表示はクラスのtoStringを使っているため、
toString関数をオーバーライドし、表示したい項目を指定すれば表示できる。
② sourceに設定する場合
combobox.DataSource = hogeClass.list
ComboBox.DisplayMember = hogeClass.name
comboBox.ValueMember = hogeClass.code
②の場合、
selectedItemのみでなく、selectedValueが使えるので楽チン
プロセスの起動
shellとDiagnostics.Process, ProcessStartInfo
Shell Vs Process.start for executing external application
別記事にして細かく書く予定
色々と細かく制御できるDiagnostics.Processを使うことをここでは推奨されてます。
ただし、他に議論しているところ等を見つけられなかったので、どちらでもいいのかもしれません。
ProcessStartInfoを使って細かく設定することができる
Diagnostics.Process.Start(ProcessStartInfo)
排他制御
Mutex
Mutex.WaitOneで取得。 他のプロセスが取得していればNG.
引数で待機時間を設定可能
使い終わったら、Mutex.ReleaseMutex()で解放
log4netの設定
ハンドリングできなかったエラーのハンドリング
logへの変数名やクラス名の出力
‘’’vb
$”{NameOf(hogeClass)}”
‘’’
上記記載により変数名のリファクタリングで同時に変更されるようになる。
また&でつなぐより可読性が高い
STAとMTA
複数スレッドから呼び出せる(スレッドセーフ)か、単一のスレッドのみから呼び出せるものか定義する。
STAとMTAについて