- 題名: DoubleClickで、条件を満たすときだけCurrentCellを変更したい
- 日時: 2009/08/24 12:02:40
- ID: 25281
- この記事の返信元:
- (なし)
- この記事への返信:
- [25283] Re[1]: DoubleClickで、条件を満たすときだけCurrentCellを変更したい2009/08/24 23:34:12
- ツリーを表示
お疲れ様です 短時間で書いた手抜きなコードですが、 試してみてください P.S. クリックしようとしたセルは、DataGridView.HitTestメソッドで取得できます Public Class DataGridViewEx Inherits DataGridView Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) Select Case m.Msg Case WM_.WM_LBUTTONDOWN, WM_.WM_RBUTTONDOWN Return Case WM_.WM_LBUTTONDBLCLK, WM_.WM_RBUTTONDBLCLK If Me._条件を満たせばTrue = False Then Return End If End Select MyBase.WndProc(m) End Sub Private Enum WM_ WM_LBUTTONDOWN = &H201 WM_LBUTTONUP = &H202 WM_LBUTTONDBLCLK = &H203 WM_RBUTTONDOWN = &H204 WM_RBUTTONUP = &H205 WM_RBUTTONDBLCLK = &H206 WM_MBUTTONDOWN = &H207 WM_MBUTTONUP = &H208 WM_MBUTTONDBLCLK = &H209 End Enum Private Function _条件を満たせばTrue() As Boolean Return True End Function End Class
分類:[.NET]
DataGridViewで次のような事をしたいのですが、可能でしょうか。
1)ClickをしてもCurrentCellを変えない
2)DoubleClickをしたとき、条件判定をして、条件が満たされればCurrentCellを変更する
これまでFlexGridというMicrosoft以外のグリッドを使って上記のことが実現していました。FlexGridにBeforeSelectionChangeというイベントがあるので、それを使って別記のようにしたのです。GridをFlexGridからDataGridViewに変更しようとしたところ、DataGridViewにはBeforeSelectionChangeというイベントがなく、FlexGridと同じ事が実現できません。
●DataGridViewでSelectionChangeの前にBeforeSelectionChangeというイベントを発生させ、そのハンドラーでSelectionChangeをキャンセルできるようにすることは可能でしょうか。
●DataGridViewで、もっと別の方法で、上記1、2を実現することは可能でしょうか。
【別記:FlexGridでの上記機能の実現方法】
1)CurrentCellを設定し、cancelAtBeforeSelectionChange=trueというフラッグを設定する。
2)FlexGridにはBeforeSelectionChangeというイベントが定義されている。ここで、cancelAtBeforeSelectionChange=trueならSelectionの変更をキャンセルする。このときSelectionの変更先をnewRow, newColumnとして記録する。cancelAtBeforeSelectionChange=falseならばSelectionの変更はキャンセルしないで実行されることを許す、ただしここでcancelAtBeforeSelectionChange=trueに再設定する
3)DoubleClickイベントハンドラーで、条件判定をし、条件が満たされれば、cancelAtBeforeSelectionChange=falseにして、CurrentCellを2)で保存したnewRow, newColumnに再定義する。条件が満たされなければCurrentCelは変更せず, cancelAtBeforeSelectionChangeもtrueのまま。
4)上記3)でCurrentCellを変更したとき、SelectionChangeイベントが発生するのでそのイベントハンドラーでcancelAtBeforeSelectionChange=trueに変更する。