- 題名: 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 編集(投稿者)