先日も言ったとおり、現在就学援助ソフトを開発中です。
以前作ったソフトに機能を追加していっているわけであります。
おいらのアプリのほとんどはエクセルのようなグリッド(タテヨコの表)でデータを表示しています。 純正のMSFlexGridという部品です。
設計段階ではマウス等で列幅や行の高さをいじれず、一つ一つコードで指定しないとならないものです。 もちろん設計が簡単な部品も売っているのですが高くて手が出ません。
なによりアマチュアな自分には宝の持ち腐れ(爆)
で話しを戻します。
現在の行(=データベースで言うレコード)をわかりやすくするために、現在の行に色を付けるようにしています。
アクティブ行だけ色が変わるようにしています。
実はこれも結構面倒なコードをグリグリと書かなくてはならないのですが、まぁそんなのはいいです。
先日基本画面に機能を追加するため、ボタンを一個追加しました。「世帯表作成」のボタンです。
(↑設計画面ってこんな感じ)
それからです。 作成中のアプリの調子が突然悪くなったのは。
動かないわけではありません。 グリッドのセルを←↑↓→キーで移動するスピードが極端に落ちたのです。
それまでは「ダダダダッ」って感じで移動出来たのが「パカパカパカパカ」になっちまったのです。
もちろん命令は全くいじってません。
原因究明に入ります。
他にも画面があり、そっちでも同じようにグリッドを使ってます。
ところがそっちの画面は以前と同じように「ダダダダッ」と動くのですよ。
ずいぶん悩みましたが結局その日は分からずじまい。
本日再び究明。
で、ある事を思い出しました。 そう、ボタンを追加していたのを。
もちろんカーソルを移動しただけでその度にボタンを一回一回押していくわけではありません。
もしや、と思ってボタンのプロパティを確認。
Tabキーでアクティブな部品を移動出来るような機能がWindowにはあり、TabStop機能といいます。
そのTabStopプロパティがTrueだったのです。つまりTabキーでその部品がアクティブになる設定のままでした(デフォルトはTrue設定です)
どういうことかと言いますと、グリッドのセルを移動すると、
1.行や列が変更された→2.以前の行の色を元に戻す→3.新しい行に色を付ける
ということをやらしていますが、2と3を実行する際にグリッドの表示を消しているのです。 消す事によって処理速度が格段に(数十倍に)ハネ上がります。
ところが表示を「消す」ことによってそれまでフォーカスを持っていたグリッドから一時的にTabStopがTrueのコントロールにフォーカスが移るのです。
実はそんなことが理由だったのです。グリッド以外のコントロールのTabStopをFalseにした途端、元に戻りました。
いやはやこんなこともあるんだなぁ、と思いました。
プログラムやっていると、まだまだOSに遊ばれているなぁと思うこの頃なのです。