- 題名: DataGridView上のコントロールのkeydownイベント
- 日時: 2010/06/14 19:15:37
- ID: 26943
- この記事の返信元:
- (なし)
- この記事への返信:
- [26964] Re[1]: DataGridView上のコントロールのkeydownイベント2010/06/18 23:33:18
- ツリーを表示
お疲れ様です。 当方環境ではPreviewKeyDownでうまくいきましたので 試してみてください。 Public Class Form_DGVPictureBoxKeyDownTest Inherits Form Dim _dgv As New DataGridView Dim WithEvents _picbox As New PictureBox Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) Me._picbox.SetBounds(50, 50, 100, 100) With Me._dgv .RowCount = 10 .ColumnCount = 5 .Dock = DockStyle.Fill .Controls.Add(Me._picbox) End With Me.Controls.Add(Me._dgv) MyBase.OnLoad(e) End Sub Private Sub _picbox_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles _picbox.Click Trace.WriteLine("Focus") Me._picbox.Focus() End Sub Private Sub _picbox_PreviewKeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles _picbox.PreviewKeyDown Trace.WriteLine(e.KeyCode.ToString) If Control.ModifierKeys = Keys.Control AndAlso e.KeyCode = Keys.C Then Trace.WriteLine("CTRL+C") End If End Sub End Class
分類:[.NET]
VisualStudio2008、VB.NETにて、Windowsアプリケーションを作成しています。
現在、DataGridView上に配置したPictureBoxにfocusが当たっている状態で、
PictureBoxのKeyDownイベントの処理を行った時、
DataGridViewのRowが1以上の場合、ctrl+Cを押下した時に
KeyDownイベントが発生しないという現象が起きました。
しかし、ctrl+Alt+Cだとイベントが発生します。
FormのKeyPreviewをTrueにしてみましたが、何も変わりませんでした。
どうにかこのような時のkeyDownイベントを取得する方法はありませんでしょうか。
もしありましたら、どうかご教示願います。
以下、検証に用いたコードです。
※デザイナにて、PictureBoxの親コントロールをDataGridViewになるようにしています。
Public Class Form
Private Sub form_load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
DataGridView1.Rows.Add()
Me.KeyPreview = True
End Sub
Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
CType(sender, PictureBox).Focus()
End Sub
Private Sub PictureBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles PictureBox1.KeyDown
If e.Control Then
If (e.KeyCode And Keys.C) = Keys.C Then
'Ctrl+Cが押下された場合
MsgBox("ccc")
Else
MsgBox("ddd")
End If
End If
End Sub
End Class