teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

修正

2020/10/28 01:28

投稿

退会済みユーザー
answer CHANGED
@@ -22,7 +22,7 @@
22
22
  this.Controls.Add(elementHost);
23
23
  }
24
24
 
25
- protected override void OnKeyDown(KeyEventArgs e)
25
+ protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
26
26
  {
27
27
  base.OnKeyDown(e);
28
28
 

2

追記

2020/10/28 01:28

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,47 @@
1
1
  恐らくWPF側のコントロールがキーイベントを処理してるので、
2
2
  WPFコントロール側のKeyDownイベントハンドラ書いて
3
- 共通のメソッドに流してやるとかしてやらないとダメかもしれません。
3
+ 共通のメソッドに流してやるとかしてやらないとダメかもしれません。
4
+
5
+ WinFormsとWPFでKeyEventArgsの内容とキーの定数値が微妙に異なるので、
6
+ その辺りを吸収する必要があるでしょうね。
7
+
8
+ ```csharp
9
+ protected override void OnLoad(EventArgs e)
10
+ {
11
+ base.OnLoad(e);
12
+
13
+ //WPFのButtonコントロールを作成し、ClickとKeyDownイベント追加
14
+ var wpfButton = new System.Windows.Controls.Button();
15
+ wpfButton.Content = "WPF(_P)";
16
+ wpfButton.Click += WPFButtonClick;
17
+ wpfButton.KeyDown += WPFKeyDown;
18
+
19
+ //ElementHostコントロールを作成し、フォームに追加
20
+ var elementHost = new ElementHost();
21
+ elementHost.Child = wpfButton;
22
+ this.Controls.Add(elementHost);
23
+ }
24
+
25
+ protected override void OnKeyDown(KeyEventArgs e)
26
+ {
27
+ base.OnKeyDown(e);
28
+
29
+ if (e.KeyCode == Keys.N)
30
+ {
31
+ MessageBox.Show("Nが押されました。");
32
+ }
33
+ }
34
+
35
+ private void WPFKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
36
+ {
37
+ if (e.Key == System.Windows.Input.Key.N)
38
+ {
39
+ MessageBox.Show("Nが押されました。");
40
+ }
41
+ }
42
+
43
+ private void WPFButtonClick(object sender, System.Windows.RoutedEventArgs e)
44
+ {
45
+ MessageBox.Show("WPFボタンが押されました");
46
+ }
47
+ ```

1

少し修正

2020/10/28 01:27

投稿

退会済みユーザー
answer CHANGED
@@ -1,3 +1,3 @@
1
1
  恐らくWPF側のコントロールがキーイベントを処理してるので、
2
- WPFコントロール側のイベントハンドラ書いて
2
+ WPFコントロール側のKeyDownイベントハンドラ書いて
3
3
  共通のメソッドに流してやるとかしてやらないとダメかもしれません。