2007年6月29日金曜日

右クリックメニュー

とりあえず一段落した右クリック周り。共通制御に組み込む、ってところが色々と悩んだけどとりあえずはそれなりな形でリリースできたと思う。プロパティの設定やイベントの発生周りについては、特に意識することなく制御されるから。

問題になったのは「対象データってどれ?」という話題。

グリッド系コントロールだとHitTest使って対象行特定できるな~、と漠然に考えていたら・・・できるわけねぇんだ、これがw

メニューを表示してクリックする → マウスカーソルが移動する
メニュークリック時の座標使ってもどうしようもない、というか関連がないw
これを解決するとなると・・・メニューを表示する直前に座標を保持する、ってとこなんだろうなぁ・・・。隠れて仕込んでおかないと。

2007年6月28日木曜日

ContextMenuStripのClickイベント

なんじゃこりゃw

Clickイベント発生の際に渡されてくるsenderって「発生元コントロール」でなくて「その時アクティブだったコントロール」だったのか!どうりで変なコントロールがイベントに飛んでくるはずだ・・・(´・ω・`)

VisualStyleElementのGlyph

TreeGridViewを用意したはいいけれど、VisualStyleを利用していない環境では思いっきり例外投げてしまうのが発覚。例外見て、「そりゃそうだわなぁ」なんて思える内容なんだけど、実際にはちょっと困ったことが。

VisualStyleを適用している際に表示するモノってのはSystem.Windows.Forms.VisualStyles.VisualStyleElementからたどっていってレンダリングできるんだよな。ところが適用していない場合に表示するモノってのが見つからない。個人的には適用していてもしてなくても同じロジックで取れるとありがたいんだけど・・・。
高望みか、これは。

2007年6月19日火曜日

Office2007

今回のお仕事は、出荷状況の都合でOffice2007になることが正式に決定。いやぁ、これでCOMを利用した制御から逃れられるw
となると、課題になるのがOfficeのファイルフォーマットの入手かな?それと、ライブラリのところから2003→2007に変更しないと・・・。
あれ、そういえば2003と2007って同居した時にメソッドの拡張やらが行われるからちと問題があった記憶が・・・。まぁいいか。メソッドたたいてファイル操作すること自体がなくなるんだし・・・。

追記(15:49)
ちくしょう、英語でしかドキュメントが入手できないっ!!

ShaerPointServiceの拡張

こういうソリューションが無償で提供されているっていうのが、ものすごい脅威なんだよねぇ。なにしろ拡張部分ってのはVisualStudioを利用してWebパーツとして作成できるんだから。実際にweb上でも、SharePointService(またはOfficeSharePointServer2007)を利用して構築されたサイトってのも見受けられるし。
同じようなグループウェアも色々あるけど、拡張性やら何やらを考えると「システム屋に向いている」のはSharePoint系だなぁ、と思う。ユーザー向けなのはサイボウズだとかDeskNetsとかだろうけど。

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順にソートさせる下準備もしたんで、明日あたりはうまいこといってくれるといいなぁ。