- 題名: 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に変更する。