掲示板お問い合わせランダムジャンプ

Top Index
Yahooは検索方式が変わったせいか、うまくサイト内検索できないなぁ。つーわけでグーグルに変更。


2008年11月12日
MDI子フォーム上でCtl+C、Ctl+X、Ctl+Vなどが効かない場合の原因
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)を削除してから、再度実行してみてください。
正常に動作しました^^;

追記
さっそく上述の掲示板に返信してみようとしたのですが、質問者がクローズしたためかレスがつけられませんでした。残念!
[ 投稿者:mk3008 at 00:24 | フォームTips | コメント(0) | トラックバック(0) ]

この記事へのコメント

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a03187/0000260892.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000260892.html

記事へのコメント
 
認証コード:
画像に表示されるコードを半角英数字で入力して下さい。画像が読み難い場合はこちら
簡単演算認証: 8 + 2 =
足し算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント: