DataGridView や DataRepeater にこだわりつつ
時代は Workflow Foundation などと言い続けていたら
これからは LogicFlow だろ! と思い始めてきた
色々浅く広くやっていく古い技術者の Blog
2008年12月2日火曜日
2008年4月22日火曜日
まずい
なんというかメンバーの調整だとか、プロジェクトの進行把握とかマネージメントなことばかり・・・。
いやぁ、そろそろ普通にコード触りたいんだけどなぁ。
構想だけねって、コードに起こしていないネタが色々あるんだよなぁ。
AOPとかはできるだけ取り込みたいってのに・・・。
2008年3月26日水曜日
2007年12月31日月曜日
年越し
こっちも久々に更新。
気がつくと2007年も終わり。今年は.Netに始まって.Netに終わる一年だったなぁ。おかげで当初に比べると色々なことがわかってきて、色々なことができるようになってきたね。
DataGridViewとはまだまだ付き合い長いだろうけどねぇ。未だにわからないところが多々あるし・・・。
ただ、実際にはもうWPFとかに移行していかないとマズイんだろうな。
ま、今年も色々ご迷惑をおかけしましたが、来年もまた変わらずよろしくお願いします。
2007年10月15日月曜日
いやはや
開発も佳境へ・・・だとどんなによかったか(w
まだ設計終わってないってどういう事よw
まぁね、今回はいい経験になるのは間違いないから、それを信じて頑張っているけどね。自分は周りをサポートするけど、俺をサポートする人材がいねぇ。なんとかならんか、これ。
2007年9月27日木曜日
VB6サポート
昨日Windows2008Serverのセミナーに参加してきたんだけど、どうやらまだVB6ランタイムはサポートされる様子・・・。
技術者としては「とっととサポートうち切って.Netに完全移行」させてしまっていいと思うんだよねぇ。どうせVB6がサポートされないと困る!なんて言っている人たちって、サポートうち切られたからって他OSに移る可能性は低いと思うんだよなぁ。
WindowsでVBしか使えない人だから文句を言っているような気がしてならないのよ。
2007年9月15日土曜日
ヘッダの拡張・・・どうするよ
DataGridView本体は色々拡張しているんだけど、未だに拡張を行っていない部分があるんだよねぇ。ヘッダなところが。
「どうデザインさせるか」とかを考えると、エディタ作れるようにならなければ厳しい部分があるんだよねぇ。自分が使うだけならどうとでもやるんだけど、他の人が使うのが大前提だからなぁ。難しいわぁ。
2007年8月22日水曜日
マニアな道へ
考えてみるとしばらくDataGridViewな話しか書いてないw
というよりも世の中.Net2.0から3.0へと移ろうとしているからなぁ。WPFでどうこうする方がメジャーになろうとしているのかも。
まぁ、自分はその中でもDataGridViewとしばらくおつきあいしないといけないのでまだまだ色々やっていくつもり。
完全にマニアな世界だw
2007年8月2日木曜日
ContextMenuStrip
DataGridViewの拡張で、行列それぞれのヘッダ用のメニューを用意していたんだよね。で、普通にプロパティで設定するのはセルにだけ適用されるように、と。
・・・したつもりだったw
DataGridViewのContextMenuStripプロパティをオーバーライドして、MyBaseのプロパティ側にはデザイナで設定したインスタンスがわたらないようにしたんだけど、ところが実行してみるとデザイナで設定されたメニューが普通に表示されてしまうのよ。プロパティのオーバーライドって問答無用で継承元も呼び出されるんだっけか?
対応としてはOnColumnAddedとOnRowsAddedをオーバーライドして、そのタイミングで行列用メニューを設定することに。そうすることで目的の動作は達成できたからいいんだけどね。
どうにも気になる。
2007年7月28日土曜日
DataGridViewでソート
単純にソートする機能は元々持っていたから安心していたんだよね。
でもここ最近某MultiRowコントロールに近づけるために拡張したことによって、結構考えなければいけないハメに。MultiRowコントロールやそのほかのグリッド系コントロールは「セルをマージしてレイアウトを作成する」タイプなんだけど、今回自分が用意したのは「セルに好きなコントロールを表示する」方法だったので、セルに格納される値ってのが多種多様・・・つーかなんでもありw
今ではDataGridViewのセルの中にDataGridViewを出して、さらにその中に・・・なんてことも平気でできるようにしてしまったので、ことさらこの問題が顕著に。
気持ちとしてはExcelなどで行っている指定の方法がベターかな、なんて思っているのでそれに近い方法を用意しようとは思ったんだけど。項目名を指定させるところでちょっと悩む。
ヘッダのTextを名称として利用する、と統一とれれば楽なんだけどなぁ。今のところヘッダの拡張はやっていないからそこまで辿り着けていないんだよね。
しかしここまでDataGridViewを拡張して色々やっているけど、時代はもう3.0に突入しようとしているんだよね。2.0な世界をどこまでひっぱっていけることやら。
2007年7月21日土曜日
ドラゴンナイト4
リメイクされてたのねぇ。色々と思い出深いタイトルだからちょっと調べてみたけど・・・なんというか今のエルフっぽい作品だなぁ。
戦闘シーンだけのリメイクだからねぇ。
やっていた当時は戦闘パートの難しさと、2週目がしっかりとした理由あっての事だったってのが好きだったねぇ。爆弾娘を一番鍛えたりw
んー、昔のまま出してくれた方が良かった気がするw
2007年7月16日月曜日
DataGridViewの編集
んー、いまいち流れがわからない箇所がある。
編集が終わってセルへ値を更新するタイミングがあるんだけど、サブエディタをしっかり作るに当たってそこがよくわからなくなってきた。編集コントロール側ではセルに対してどうのこうのはやらない、というのであればセルかDataGridView側から編集コントロールにアクセスしにくるはずなんだけどなぁ・・・。
前のフォームを利用したサブエディタの場合は、逆に編集コントロールからセルに値を更新していたんだよな。んー、よくわからない。
2007年7月7日土曜日
IDataGridViewEditingControlを使う その2
隠れて進めているちゃんとしたDataGridViewのサブエディタ。現時点では、サブエディタの表示からキー制御などの引継など基本的なところは大体実装済み。
ただこの「表示」ってのが問題になっていて。ああそうか、という内容なんだけど「親であるDataGridViewを超えて編集コントロールを描写はしてくれない」ってところ。なので表示しようとするサブエディタによってはとぎれるんだよねぇ。
コンテナとその子供の描写についてはまだあまり調べきっていないので、このあたりを見ていけばどうにかなる・・・のかな?
でも親コンテナを超えて描写される子供コントロールって見たことないからな。いがいとそのままじゃどうしようもないかもしれないね。
2007年7月1日日曜日
右クリック その2
前にちょっとだけ設計を行っていた右クリック周り。
先週中に一段落つけてはみたんだけど、意外に手間取ったなぁ。つかContextMenuStripのClickイベントではなんでsenderに「現在Activeなコントロール」のインスタンスが設定されてきているんだろう?
これが必要になるケースってのがよく思いつかないんだよねぇ。「特定のコントロールにフォーカスがある際にのみ、コンテキストメニューを表示する」なんて処理が、自分が思うよりもたくさん使うケースがあるってことなのか、それとも全然意味合いからして違うのか・・・。
人様のAPやらソースやらもっと色々みないといけないな、これは。全然思いつかない。
2007年6月17日日曜日
IDataGridViewEditingControlを使う
以前にある程度実用的に用意できたサブエディタだけど、ここ最近色々と問題が発覚。そこで断念していた「ちゃんとしたサブエディタ」の設計と実装を始めることに。
DataGridViewコントロールの仕組みとして、編集コントロールをホストするタイプの物はIDataGridViewEditingControlを継承している必要があるのと、「ホストされるコントロールを継承している」必要があるんだよね。MSDNなどのサンプルも全てそうなっている。でもやりたいこととしては、「AP実装者側で自由にサブエディタのGUIやロジックを記述できるようにする」ということなので、ホストされるコントロールの継承、というのが今回は行えないんだよな。
んじゃあどうしましょ、というところで今考えているのが編集時にイベントやロジックを全て受け継ぐというか、トラップして制御を委任するだとかそういった制御。イベントだけだとまだ問題ないんだよね。イベント管理のコレクションを元にやってあげれば恐らくできそう。コントロールの配置とかも問題ないかな。
ただその割に、うまくいきそうでいかないんだよなぁ。何か見落としているか、間違ってそうな予感が満載。イヤな感じだ・・・。
2007年6月6日水曜日
うまくいった
昨日のTabIndexはなんとかうまくいった。大体想定したとおりに動いてくれたので良かった・・・。
今日出た問題の中にDataGridViewTextBoxCellのWrapMode問題があったなぁ。WrapMode=Trueとしたときだけ例外が発生するという。Reflcterで追っかけてみると、確かにWrapMode=Trueとした場合のロジックで問題がありそうな箇所が発見できた。セルの編集済み書式を取得するメソッドで明示的にStringを返していないといけなかったみたいで・・・。でもこれってWrapModeにTrueを指定したときだけなんだよね。NotSetやFalseをセットした場合は今回みたいな例外は発生しない。
DataGridViewTextBoxCellを継承しているコントロール全てに関連する問題だけど、これは仕様なのかバグなのか微妙だな・・・。なんでセルの値に対してToStringしないでCStrかけているんだろう??
2007年6月4日月曜日
TabIndexだよちくしょう
今までほおっておいた、TabIndex問題にようやく取りかかってみた。
TabIndex問題はVB6までと.NetでTabIndexのルールが変わり、直属のコンテナが別であれば値の重複は可能、というところ。
今のところ考えている手段はControlAdddedイベントの際に、別途用意したArrayListの派生クラスにコントロール名とTabIndexを保持させて、ついでに実際の状態と同じように名称とかを保持していく方法。
そんなもんで、今まであまり気にしていなかったSortメソッド関連を色々調査してみることに。
ICompare~とかを継承してTabIndex順にソートさせる下準備もしたんで、明日あたりはうまいこといってくれるといいなぁ。
2007年5月29日火曜日
右クリック
ここ最近の設計での悩みがこれ。実際にはもう一つあるけど、今のところの悩みはここ。
簡単に言えば右クリックで表示するコンテキストメニューを制御しようじゃないか、というもくろみなんだけど、実際に設計をはじめて壁にぶちあたってしまったのよ。それは「クラスで何を管理するか」というところ。
どこまで汎用的にするか、という話題も絡んでいるんだけど実際にインターフェースやらを考えていると、以外と汎用的なロジックを記述する部分というのがでてこないんだよね。
んー、なんか見落としか考え違いをしている気がして怖い。
2007年5月4日金曜日
続 DatGridViewでサブエディタ
何とか形になったDataGridViewでのサブエディタ。でも正直言うと、綺麗な構造にはなっていないんだよね。IDataGridViewEditingControlを継承した形で行うのが一番ベターなんだけど。今回はそこまでは手が回らなかった・・・。
そこにさえ目をつむれば、セルの編集開始と同時にサブエディタが表示され、サブエディタ上の処理は個別にコーディングできるようにはしたし、キー制御も親元から引き継いで処理されるようにはしたから結構満足。
これで残った大きい問題は・・・フィルタ処理だけ、かな。アンバウンドな時の処理ってのは非常に厄介なんだよなぁ・・・。
2007年4月24日火曜日
DataGridViewでコンボボックス
DataGridViewの基本機能の中でもくせ者中のくせ者、コンボボックス。
最初は全く持って例外が発生する理由がわからずに利用を断念していたんだけど、ここに来てようやく解決。.Netのコンボボックスの仕様とまったくもって違う仕様だったもんで、結構頭悩んだなぁ。独自クラスをItemsコレクションに放り込むまでは何ともないくせに、そのセルを編集やらなんやらしようとした瞬間に例外を放り投げてくれます。
結局DataGridViewComboBoxCellクラスを継承して独自セルを用意することで対応。ポイントとなるのは、値を表示する時と値から中身を用意するとき。表示は問題ないんだよね、この時点でセルのValueには独自クラスが入っているから。
ちょっと考えたのは値から中身を用意する方だったけど、よく考えてみるとColumn側で中身の候補は保持されているんだよね。なもんで、これも解決・・・と行きたかったんだけど、実は全てアンバウンドな状態じゃないと使えないんだよなぁ、これ。
バウンド時のロジックは気が向いたら入れておこう・・・。