- 題名: DataGridのMouseUpイベントについて
- 日時: 2004/09/10 15:22:45
- ID: 6107
- この記事の返信元:
- (なし)
- この記事への返信:
- [6115] Re[1]: DataGridのMouseUpイベントについて2004/09/10 18:44:39
- ツリーを表示
■No6107に返信(にしかわ あつこさんの記事)
> いつもお世話になっております、にしかわです。
> DataGridのフォーカスについて、教えてください。
> 現在DataGridで、特定のセルをクリックしたら別画面を表示するような
> コードを作成しています。
> 特定のセルをクリックすると別画面が表示する、まではいいのですが、
> 別画面を閉じた後、DataGridにはクリックしたセルにフォーカスを残し、
> 再度同じセルをクリックしても、何の動きもしないのです。
> フォーカスをそのまま残した状態で、別の個所をクリックしたり、
> 別セルをクリックすると、別画面が出るようにはなるのですが、
> 同じセルを再度クリックすると、途端に別画面を表示できなくなります。
途端にというより、CellにFocusがあると、
DataGrid側の、MouseDown()およびMouseUp()イベントが
発生しなくなるからのようですね。
なので、
> If e.Button = MouseButtons.Left Or e.Clicks >= 1 Then
> としても、反応しないのです。
MouseUp()イベント自体が発生しないので、条件を変えても当然ムリなわけでして...
私も以下のコードでそれは確認しました。
ソースコード開始:--------------------------------------------------------
Private Sub DataGrid1_MouseUp(略)Handles DataGrid1.MouseUp
Dim tCell As DataGridCell
Dim iRow As Integer
Dim iCol As Integer
Dim nCellText As String
Dim pForm As Form1
If e.Button = MouseButtons.Left Then
tCell = DataGrid1.CurrentCell
iRow = tCell.RowNumber
iCol = tCell.ColumnNumber
If iCol = 1 Then
nCellText = DataGrid1.Item(iRow, iCol).ToString()
pForm = New Form1
pForm.Text = nCellText
pForm.ShowDialog(Me)
' ここでFocusを殺せばいいんだけど
End If
End If
End Sub
---------------------------------------------------------ソースコード終了
1番楽な解決方法は、選択したCellからFocusを逃がせば良いのですが、
それだとカッコ悪いのでお困りなのだと思います。
かといって、マウス位置からイベントを起こしたり、
カスタムコントロールを作るのは、当然骨が折れます。
当然、Focusを逃がす方法だとイヤなので、ここからは提案になりますが、
私ならば、セルをClick(MouseDownやMouseUpも然り)することで
別ダイアログを出さずに、Buttonコントロールを使います。
> 特定のセルをクリックすると別画面が表示する、
というのも、ButtonコントロールのEnabledを使うとユーザさんにわかりやすいです。
どのセルならダイアログを開けるか見た目でわかるからです。
(まあセルの色で識別する方法とかもあるのでしょうが...)
何か、アドバイスというより提案になってしまいました。
力不足で申し訳ありません。
分類:[.NET]
2004/09/10(Fri) 15:24:27 編集(投稿者)