2007年2月27日火曜日

DataGridViewのキー制御

相も変わらずキー制御がここ最近のテーマ。

某MultiRowコントロールはデザイン情報をテンプレートとして参照できたから、フォーカスのあるセルをチェックしてそれなりなショートカットキーを割り振ることができたんだよねぇ。
ところがDataGridViewはそういった情報がない。やるとしたらDataGridRowクラスあたりをチェックして・・・となるんだけど。

んー、コントロールがロードされたときの処理が色々多くなってきたから、そろそろ構造的に考え直さないとまずいかなぁ。

2007年2月24日土曜日

TabIndexがっ

今まで全然考えていなかったけど、今日になって「やばっ」と気づいたTabIndexを利用したキー入力制御。VB6までだとTabIndexはForm内部で重複なしだったから、単純にコントロールに設定されているTabIndexを元にして色々と制御を行うことができたんだよね。<br><br> ところが。

.NetになってForm内ではなくコンテナ内で重複なし、と変わっていた・・・。

これ、ちゃんと制御しようとするとコンテナのTabIndexとかもきっちり見ていないとできないなぁ・・・。今のところは、実装してもらう人に注意してもらう方法でやりくりする予定だけど。グリッド系のコントロールがなければ、SelectNextControlメソッドやProcessDialogKeyメソッドあたりのオーバーライドですむんだけどなぁ。

2007年2月15日木曜日

DataGridViewのProcess~系メソッド

DataGridViewのEnterキー対応のサンプルは結構みつかるんだけど、だいたいはProcess~メソッドのオーバーライドによって対応しているみたいで。

でも最近思ったのが、CellValidatingイベントでキャンセルした場合、Process~メソッドで例外が発生するんだよね。処理の内容を考えると、例外が発生するのは当たり前(キャンセルしているのにセルを移動しようとしたため)なんだけど、これに対応しようとするとTry~Catchでトラップするか、Validatingイベントの結果を保持していないといけなさそうなんだよね。

なんかTry~Catchで対応するってのがしっくりこないんだけど、ほかに方法があるんだろうか?

2007年2月11日日曜日

MultiRow・・・

ここしばらくまともに実装はしていないけど、近々やる事になりそう(というよりもやらないとピンチ)なのがMultiRowコントロールが関連した画面の表示されるまでの時間短縮。キー制御の都合もあって、MultiRowコントロールは色々と下準備する事があるんだけど、その甲斐あってか(?)表示されるまでの体感時間がえらいことに・・・。

やっぱり表示されるまで10秒近くかかるのはシャレにならんよねぇ。

つーことでソースの見やすさ云々は忘れて、久々速度へ挑戦することになりやした。どこまでできるかは不安だけどね。

2007年2月9日金曜日

.Net3.0

たまに3.0の力を試すべく、Expressionを試しているんだけど、WPFってスゲーというのが正直な感想。まあGPUを普通に使えるからなんだけど、描写能力が圧倒的に違う。普通にWindowsFormとかで作成している限り、絶対に勝ち目がないぐらい。

業務用アプリだから、といっておろそかに出来ない時期がそう遠くないうちにくるんだろうなぁ・・・。時間さえあれば、今からでも切り替えたいくらいだ(w

2007年2月2日金曜日

Validating周りで

最近Validatingイベントの抑制をやってみた。理由は簡単で、現在の案件の仕様が、Validatingでチェック(と名称の表示など)を行うようにやっているんだけど、毎回毎回値の変更があるかどうかをチェックしないといけないの?という要望からだった。

考えてみると全くその通りで、今まではValidatingイベント内部で値の変更をチェックし、変更されている際はマスタから名称の取得などをやるようにしていたんだけど、そもそも「Validatingイベントが値変更時にのみ発生する」という条件が付与できれば。
結果は良好なんだけど、一部で厄介なパターンも。

グリッド系コントロール(DataGridViewとか)だと、セルのValidatingイベントは起きないケースがあるということ。タイミングとしては最終セルから別コントロールへ移動した時とかかな。
現状はこのタイミングで別のValidating処理用イベントを発生させているんだけど、こうなるとValidatingの結果キャンセルされた、という処理がマズイ事に。

打開策は今のところ思いつかないので後回しなんだけどね。他では多分こういう方法は使わないんだろうなぁと思いつつ。