VB.NET

DateTimePicker の入力値が取得できない

DateTimePicker で 1 桁の値を入力した直後に Enter を押すと ValueChange イベントより先に Validating が実行されるため Validating 時点で入力値が取れないなんてことが発生してた。
Form の KeyDown イベントで Enter が押された場合は次項目に遷移するようにしていることが遠因として挙げられそう。
とりあえず DateTimePicker の場合は SelectNextControl 実行前に強制的に入力値が確定するようにして逃げた。

    If (TypeOf Me.ActiveControl Is DateTimePicker) Then
        SendKeys.SendWait("{left}{right}")
    End If
    Me.SelectNextControl(Me.ActiveControl, True, True, True, True)

検索ダイアログが表示されない

裏に回っているのか描画領域外に出ていってしまったのか、現象の詳細は不明。
メニューより [ウィンドウ] → [ウィンドウ レイアウトのリセット] を実行することで解決はした。

謎のコーディング

左辺に定数

C など他の言語でバグを減らす小技のためである可能性がある。

C など、格納が「=」、比較が「==」である言語はけっこうある。
その手の言語で x が 10 のとき y に 1 を設定する処理を記述するつもりで以下のように打ち間違えたとする。

    if (x = 10) y = 1;

この場合でもコンパイルは正常終了するため、バグの発覚と原因特定が遅れる。
(上記例では格納は常に成功するため x の値にかかわらず、常に y に 1 が格納されてしまう。この手のバグは見つけにくい。)

それを避けるための小技が定数を左辺に書くというもの。
以下のように、定数を左辺に書いておけば打ち間違えた時にコンパイルエラーになるためすぐに誤りに気づく。

    if (10 = x) y = 1;

VB では無意味な技だが、多言語を操るプログラマーが VB で癖がついた結果、後々他言語でミスを犯してしまうのを避けるため、あえて定数を左辺に書いている場合がある。
なお、左辺に定数を書いても「少し気持ち悪い」以外の不都合はない。

Boolean 型ではなく Integer 型を用いている

VB2.0 以前は Boolean 型が存在しなかったため Integer で代用していた。
VB2.0 から焼き直しを続けているシステムに残っていたり、VB2.0歴の長いプログラマーが使う場合が考えられる。
なお Integer 型のままでも「少し気持ち悪い」以外の不都合はない。

Decimal 型ではなく Double 型を用いている

VB6.0 以前は Decimal 型を明示的に宣言することが出来なかったのでその名残の可能性がある。
Decimal 型は Double 型よりもパフォーマンスが悪いため、あえて使用している可能性がある。(浮動小数点の桁落ちが発生しない保証がある場合は Double 型の方が良い。)

マルチスレッド化でレスポンスが速くなるはずなのに速くならない

通信系で稀によくある。最大同時接続数の初期値が 2 であるがために発現する壁。
最大同時接続数を変更するには ServicePointManager.DefaultConnectionLimit を変更すれば良い。

ODP.NET Parameter に関する備忘録

CHAR型の項目は空白を埋めて参照する。

Command_.Parameters.Add("PARAM1", Oracle.DataAccess.Client.OracleDbType.Char, 3).Value = param1.PadRight(3)

  • 最終更新:2017-07-05 19:54:40

このWIKIを編集するにはパスワード入力が必要です

認証パスワード