いつもお世話になっております。
現在WindowsForm上に、WPFのコントロールの実装を行っているのですが
Form上のKeyDownイベントの実行ができず困っております。
そこで、簡単なテストプログラムとして、Form上にWindowsフォームのボタン、WPFのボタン(System.Windows.Controls.Button)の2つを設置したものをいくつか作成し、動きを確認しているのですが、WPFのボタンを押下した後はForm上のKeyDownイベントを実行できないことを確認いたしました。
WPFコントロールの操作を行った後も、xamlを利用せずにForm自身にフォーカスを移す方法等ありましたらご教示いただけないでしょうか。
WPFは初心者のためWindowsFormと合わせたときに、考慮すべき内容がまだわかっていないところも多いです。
また、訳あってWPFのxamlファイルは利用できないためコードだけで記載できる内容ですと嬉しいです・・。
###発生している問題・エラーメッセージ
WPFコントロール操作(ソース上ではClick)後、FormのKeyDownイベントが実行できない。
###該当のソースコード
C#
1 /// <summary> 2 /// コンストラクタ 3 /// </summary> 4 public Form1() 5 { 6 InitializeComponent(); 7 } 8 9 /// <summary> 10 /// ロード時 11 /// </summary> 12 /// <param name="sender"></param> 13 /// <param name="e"></param> 14 private void Form1_Load(object sender, EventArgs e) 15 { 16 InitForm(); 17 } 18 19 /// <summary> 20 /// フォーム初期化 21 /// </summary> 22 private void InitForm() 23 { 24 var btnWPF = new System.Windows.Controls.Button(); 25 btnWPF.Content = "WPF(_P)"; 26 btnWPF.Click += BtnWPF_Click; 27 28 var btnWPF2 = new System.Windows.Controls.Button(); 29 btnWPF2.Content = "WPF(_Q)"; 30 btnWPF2.Click += BtnWPF2_Click; 31 32 var btnWPF3 = new System.Windows.Controls.Button(); 33 btnWPF3.Content = "WPF(_R)"; 34 btnWPF3.Click += BtnWPF3_Click; 35 36 this.elementHost1.Child = btnWPF; 37 this.elementHost2.Child = btnWPF2; 38 this.elementHost3.Child = btnWPF3; 39 } 40 41 /// <summary> 42 /// KeyDownイベント 43 /// </summary> 44 /// <param name="sender"></param> 45 /// <param name="e"></param> 46 private void Form1_KeyDown(object sender, KeyEventArgs e) 47 { 48 if (e.KeyCode == Keys.N) 49 { 50 MessageBox.Show("Nが押されました。"); 51 } 52 } 53 54 private void BtnWPF3_Click(object sender, System.Windows.RoutedEventArgs e) 55 { 56 MessageBox.Show("WPF3のボタンです。"); 57 } 58 59 private void BtnWPF2_Click(object sender, System.Windows.RoutedEventArgs e) 60 { 61 MessageBox.Show("WPF2のボタンです。"); 62 } 63 64 private void BtnWPF_Click(object sender, System.Windows.RoutedEventArgs e) 65 { 66 MessageBox.Show("WPFのボタンです。"); 67 } 68 69 private void btnWInform_Click(object sender, EventArgs e) 70 { 71 MessageBox.Show("WindowsFormのボタンです。"); 72 } 73 74 private void btnWinform2_Click(object sender, EventArgs e) 75 { 76 MessageBox.Show("WindowsForm2のボタンです。"); 77 } 78 79 private void btnWinform3_Click(object sender, EventArgs e) 80 { 81 MessageBox.Show("WindowsForm3のボタンです。"); 82 }
###確認したこと
①KeyDownイベントは以下の場合起動可能。
・Form起動時
・WindowsFormのボタンをクリックした場合
・WPFのボタンをクリックしていない、かつWPFボタンをアクセラレータキー(_P)などで
起動した場合
②WPFボタン押下後はKeyDownイベントは実行できない。
###補足情報(言語/FW/ツール等のバージョンなど)
.NetFrameWork 4.5
回答1件
あなたの回答
tips
プレビュー