2007年5月29日火曜日

右クリック

ここ最近の設計での悩みがこれ。実際にはもう一つあるけど、今のところの悩みはここ。

簡単に言えば右クリックで表示するコンテキストメニューを制御しようじゃないか、というもくろみなんだけど、実際に設計をはじめて壁にぶちあたってしまったのよ。それは「クラスで何を管理するか」というところ。

どこまで汎用的にするか、という話題も絡んでいるんだけど実際にインターフェースやらを考えていると、以外と汎用的なロジックを記述する部分というのがでてこないんだよね。

んー、なんか見落としか考え違いをしている気がして怖い。

2007年5月4日金曜日

続 DatGridViewでサブエディタ

何とか形になったDataGridViewでのサブエディタ。でも正直言うと、綺麗な構造にはなっていないんだよね。IDataGridViewEditingControlを継承した形で行うのが一番ベターなんだけど。今回はそこまでは手が回らなかった・・・。

そこにさえ目をつむれば、セルの編集開始と同時にサブエディタが表示され、サブエディタ上の処理は個別にコーディングできるようにはしたし、キー制御も親元から引き継いで処理されるようにはしたから結構満足。

これで残った大きい問題は・・・フィルタ処理だけ、かな。アンバウンドな時の処理ってのは非常に厄介なんだよなぁ・・・。

2007年4月24日火曜日

DataGridViewでコンボボックス

DataGridViewの基本機能の中でもくせ者中のくせ者、コンボボックス。

最初は全く持って例外が発生する理由がわからずに利用を断念していたんだけど、ここに来てようやく解決。.Netのコンボボックスの仕様とまったくもって違う仕様だったもんで、結構頭悩んだなぁ。独自クラスをItemsコレクションに放り込むまでは何ともないくせに、そのセルを編集やらなんやらしようとした瞬間に例外を放り投げてくれます。

結局DataGridViewComboBoxCellクラスを継承して独自セルを用意することで対応。ポイントとなるのは、値を表示する時と値から中身を用意するとき。表示は問題ないんだよね、この時点でセルのValueには独自クラスが入っているから。
ちょっと考えたのは値から中身を用意する方だったけど、よく考えてみるとColumn側で中身の候補は保持されているんだよね。なもんで、これも解決・・・と行きたかったんだけど、実は全てアンバウンドな状態じゃないと使えないんだよなぁ、これ。

バウンド時のロジックは気が向いたら入れておこう・・・。

2007年4月17日火曜日

DataGridViewでサブエディタ

DataGridViewはいじりがいのあるコントロールなんだけど、いかんせん敷居が高いというか、調べないといけないことが多い割に資料が少ないのが難点だなぁ。

今現在手をつけていないのは、前にもかいたフィルタ機能と最近あがってきたセルのサブエディタの実装。セルを拡張してサブエディタをホストするようにすればいいんだ、というのはわかるんだけど。まだ試してもいないので、実際にEditingControl関連を継承してサブエディタを実装できるのかなぁ?

これができると面白いんだけどね。まぁセルのイベントを利用して表示する方法では実現できている以上、どうにかできるんだろうけど。時間がまったくもって足りないことをのぞけば。

2007年3月30日金曜日

DataGridViewのフィルター

相変わらず設計と一緒にコントロール周りに着手。現在ピークを迎えつつあるのがやっぱりDataGridView。MultiRowでは簡単にできたアンバウンドでのフィルタ処理がDataGridViewでは簡単にいかないんだよなぁ。

サンプルソースを見る限り、バインディングをなぜ使用しない?という風に見えるんだけど、ある程度作ってしまった以上そこは通さないといけないんだよねぇ。今のところの想定は、DataGridViewRowのVisibleを設定することによってフィルタがかかったようにすればいい、というのと「どっかのイベント」でフィルタ処理の開始を行わないといけないってところまで来た。

んー表示のみ、と考えると内部でバウンドさせてしまえばいいんだろうけどなぁ。

2007年3月18日日曜日

DataGridViewでReDraw

MSDNフォーラムにも同様の話題があったので自分でもちょっとトライ中。

最初は単純にOnPaintあたりで制御かませばいいかな、なんて思っていたんだけどどうやらまだまだ複雑みたいで。どのタイミングで描写が行われるかを、もう少し掘り下げて調べないとわからないかなぁ・・・。

今のところRedrawプロパティ作って、そいつのSetterではFalse→TrueになったときにはUpdateメソッド呼ぶようにしただけ・・・でもUpdateメソッドって見た目で「更新された」ってのがわかるから、違う方法があるんだろうなあ。

2007年3月12日月曜日

Processクラスでの別プログラム実行

ようやっと今日になって解決。上にも書いてある「別ユーザーでのAP起動」。

自分の中で勘違いをしていたのが、「別ユーザーでログインした状態でプログラムを実行する」じゃないといけないと思っていたところかな。

結論としては「別ユーザーでプログラム実行だけど、ログインしている必要はない」ってところ。というかProcessクラスでは別ユーザー起動は制約が多く、正直今のままでは使えない(久々にFrameWorkの中を逆コンパイルして調べた)。

別ユーザーで起動するサンプル自体はMSのサイトからもDLできるので、方法はすぐにつかめたんだけど、それをFramework使ってやるってのがさっぱりだったのよねぇ。結局Frameworkでは無理で、APIを利用するしかないってわかったんだけど。

とりあえず一つ解決。でもまだまだ後に控えているんだよなぁ・・・。

2007年3月10日土曜日

コンボボックスの謎現象

先週からずっと悩んでいるある現象。

それはEnterイベントが発生していないにもかかわらず、コンボボックスがハイライト状態になることがある、ってところで。最初は自分で拡張した部分が原因でそうなってると思っていたんだけど、テストする時にそのあたりのロジックを全てはずしてみても発生したことから、結構根が深そう。

たぶん「ほかコントロールのEnterイベント中に特定の処理を行うときに発生する」んだと思うんだけどなぁ。ちょっと前のChekedListBoxがそうだったし。大本のコンボボックスで、どのタイミングでハイライト処理が行われているか、が見つかればもう少し対応が見つかるんだけどね。Reflector!を使って覗いていても、未だ解らず・・・。

2007年3月8日木曜日

なんというか、まあ

社会経験の浅いパートナーの社会マナーどう教育してますか?(@IT掲示板)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37183&forum=33&90

このスレッドがすごい勢いなんだけど・・・。
なんというかキツイな。どうしてそこまで、自分のやってきたことは全て正しい、というのか、相手が自分に合わせようとしない、と思うのか。<br><br>逆だと思うんだけどねぇ。相手が自分に合わせるんじゃなく、自分が相手に合わせないと。PMだとかそういった立場ならなおのこと。

ウチの社内にもそういう人間がいるからなぁ。人ごとじゃあないんだけどね。

2007年3月2日金曜日

起動が遅い

.Netアプリの宿命ともいえる起動速度の遅さ。

今の自分の仕事でもまさにその問題が勃発中で・・・。今のところ原因は某社のMultiRowコントロール。こいつが絡んだAPがのきなみ起動に時間がかかる。
色々調べて入るんだけど、ネックとなるのはテンプレートの情報らしく、正直手が出ない領域だったり。それとやはりコントロールが多い画面は、どうしても起動するまでは時間がかかるんだよねぇ。

InitializeComponentの中身な話なんで、正直どうしようもないんだよね。ここを解決しようとすると、完全に自前でコントロールを用意してしまうくらいしかないんだよなぁ。そこまでできるんだったら、サードパーティのコンポーネントなんて利用しないんだが・・・。