■58445 / inTopicNo.7) |
Re[5]: DataGridViewのセルの内容の一部をコピー |
□投稿者/ ローラレイ (4回)-(2011/04/05(Tue) 12:41:03)
|
自己レスですが、以下のサイトを参考に、キー入力規制をしてみました。
http://dobon.net/vb/dotnet/datagridview/textboxevent.html
KeyPressイベントでは、Ctrl+Cの場合、e.KeyCharのコードが&H3だったので、これ以外を無視するようにしました。
これだけだとDelキーやバックスペースキーに反応するので、参考ソースにKeyDownイベントハンドラを追加し、
ここでキー反応を無視するようにしました。
'EditingControlShowingイベントハンドラ
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
'表示されているコントロールがDataGridViewTextBoxEditingControlか調べる
If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
Dim dgv As DataGridView = CType(sender, DataGridView)
'編集のために表示されているコントロールを取得
Dim tb As DataGridViewTextBoxEditingControl = _
CType(e.Control, DataGridViewTextBoxEditingControl)
'イベントハンドラを削除
RemoveHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown
RemoveHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress
'該当する列か調べる
If dgv.CurrentCell.OwningColumn.Name = "Column2" Then
'KeyPressイベントハンドラを追加
AddHandler tb.KeyDown, AddressOf dataGridViewTextBox_KeyDown
AddHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress
End If
End If
End Sub
'DataGridViewに表示されているテキストボックスのKeyDownイベントハンドラ
Private Sub dataGridViewTextBox_KeyDown(ByVal sender As Object, _
ByVal e As KeyEventArgs)
'KeyDownを無効にする
e.Handled = True
End Sub
'DataGridViewに表示されているテキストボックスのKeyPressイベントハンドラ
Private Sub dataGridViewTextBox_KeyPress(ByVal sender As Object, _
ByVal e As KeyPressEventArgs)
'Ctrl+C以外は無視する
If Asc(e.KeyChar) <> &H3 Then
e.Handled = True
End If
End Sub
これでキー入力については制御できそうですが、何か気になる点がありましたらご指摘頂けますでしょうか?
(なお、右クリックで表示されるコンテキストメニューについては今は置いておきます。)
|
|