VisaulStadio2008 Standard SP1 にて検証。
ちなみにこの現象はMDIで起きやすいですが、SDIでも再現は可能です。
■症状
MDI子フォームでコピー、カット、ペーストのショートカットキーを押しても、
処理が実行されない。
同様の症状を検索してみましたが、それっぽいトラブルは他では発生していないのか、
あまり見当たりません。
VBレスキュー花ちゃんの掲示板に質問を投げかけている人がいるので、私の環境固有の問題でもないようです。
■再現手順 その1
1.WindowsFormアプリケーションを作成。
2.Form1にテキストボックスを1つ追加。
3.プロジェクトを右クリックして、Windowsフォームを選択。MDI親フォームを選択して追加する。
4.ツールストリップメニューにボタンを追加し、クリックイベントに以下のコードを記述する。
Dim ChildForm As New Form1
ChildForm.MdiParent = Me
ChildForm.Show()
5.スタートアップフォームをMDIParent1に変更。
6.デバッグを開始。
7.MDI親フォームが起動したら、[4]で追加したボタンをクリックしMDI子フォームを開く。
8.MDI子フォームにあるテキストボックスにフォーカスを当て、
Ctl+C、Ctl+X、Ctl+Vなどのショートカットキーを実行する。
この際、処理が走らない。
■再現手順 その2
1.WindowsFormアプリケーションを作成。
2.Form1にテキストボックスを1つ追加。
3.プロジェクトを右クリックして、Windowsフォームを選択。MDI親フォームを選択して追加する。
4.MDI親フォームのMDIコンテナ上にテキストボックスを追加する。
5.スタートアップフォームをMDIParent1に変更。
6.デバッグを開始。
7.MDI親フォームが起動したら、[4]で追加したテキストボックスにフォーカスを当て、
Ctl+C、Ctl+X、Ctl+Vなどのショートカットキーを実行する。
この際、処理が走らない。
※つまり、MDI子フォームのプロパティ設定は関係ないことになる。
■動作しない理由?
MID子フォームのKeyPreviewプロパティをTrueにして、KeyDownイベントをトラップしてみると変な現象を見ることができます。
Ctl+Cキーを押下すると本来であればCtlキーとCキーが押されていることを検知できるのですが、これをMDI子フォームで同イベントをトラップすると
・Ctlキーが押されていることを検知できます。
・Cキーが押されていることを検知できません。
ですが、Ctl+Alt+Cキーを押下すると、
・Ctlキーが押されていることを検知できます。
・Cキーが押されていることを検知できます。
となります、
※検知はできますが、コピー処理は発生しません。
ということはCtl+○キーが検知できないのか?と推測してみますが、Ctl+Eキーなどのように予約されていない組み合わせであれば
・Ctlキーが押されていることを検知できます。
・Eキーが押されていることを検知できます。
検知が可能です。
どうも予約されているキーの組み合わせが発生しないようになっている模様。
■対処、というか突然解決
こうもうまくいかないと仕様っぽいですが、かといってショットカットキーが効かないと不便です。
と思ったのですが・・・、ふと考えてみると、MDI親フォームのデフォルトにはMenuStripがデフォルトで付いています。
そうです、MenuStripもCtlキーをつかったショートカットキー(たとえば保存はCtl+Sキーなど)が利用できるため、競合している可能性があるのです。
MenuStripの「編集(E)」を見てみてください。Ctl+Cキーなどメジャーなショートカットキーが登録されていますね。
つまり、テキストボックスにショートカットキーが飛ぶ前にMenuStripがトラップしていることが原因だったのです。
では、ためしにMenuStripの「編集(E)を削除してから、再度実行してみてください。
正常に動作しました^^;
追記
さっそく上述の掲示板に返信してみようとしたのですが、質問者がクローズしたためかレスがつけられませんでした。残念!