DOBON.NET DOBON.NETプログラミング掲示板過去ログ

KeyDownイベントと既定のショートカットキーイベント

分類:[.NET]

今,複数のテキストボックスをならべてスプレッドシートもどきを作っています.
まずは.テキストボックスを縦に並べて,列クラスを作っています.
この列上のある行からある行までのテキストボックスを選択しCtl+Cを押すと,
選択したテキストボックスの文字列をクリップボードにコピーする,そういうイベントを
考えています.
で,選択されている行の文字列に改行コードをつけて,
クリップボードへコピーすることはTips集をみてできたのですが,
その後にどうも既定のCtl+Cショートカットキーのイベントが働いて,
選択されている最終行の文字列が,先に送った改行つき文字列を
クリップボード上で上書きしているようなのです.
これを回避する方法はありませんでしょうか.
一応コードを載せておきます.

<<列クラスの行数を指定したときにテキストボックスを生成しています>>
Public Property NumRow() As Integer
Get
Return nRow
End Get
Set(ByVal Value As Integer)
Dim I As Integer
Dim pt As New Point
nRow = Value
ReDim Preserve Cells(nRow)
If nRow = 0 Then Exit Property
pt.X = 0
pt.Y = Header.Height - 1
For I = 0 To nRow
Cells(I) = New TextBox
'イベントハンドラに関連付け
AddHandler Cells(I).GotFocus, AddressOf Me.Cells_GotFocus
AddHandler Cells(I).KeyDown, AddressOf Me.Cells_KeyDown
Me.Controls.Add(Cells(I))
Cells(I).Width = Me.Width
Cells(I).Location = pt
pt.Y += Cells(I).Height - 1
Next
End Set
End Property

<<KeyDownイベントです.SPとEPは選択範囲の開始行,終了行です>>
Private Sub Cells_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
'Cut & Paste
If e.Control = True And e.KeyCode = Keys.C Then
Dim I As Integer
Dim I1, I2 As Integer
Dim ST As String
I1 = SP
I2 = EP
If EP < SP Then
I1 = EP
I2 = SP
End If
ST = ""
For I = I1 To I2
ST = ST & Cells(I).Text & vbNewLine
Next
Clipboard.SetDataObject(ST)
Exit Sub
End If
End Sub
> その後にどうも既定のCtl+Cショートカットキーのイベントが働いて,
> 選択されている最終行の文字列が,先に送った改行つき文字列を
> クリップボード上で上書きしているようなのです.
> これを回避する方法はありませんでしょうか.
> 一応コードを載せておきます.

KeyPressイベントにて、
Ctrl+Cが押下された時、KeyAscii=0としてみてはいかがでしょうか?
いなさん,ありがとうございました.
別の方法でなんとかいけそうになっていたのですが,この方がすっきりしますし,
貼り付けの方でも使えますね.
感謝いたします.
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板