回答編集履歴

3

表現の修正

2020/06/11 09:02

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  PreviewKeyDownイベントではエスケープキーを捕捉できるのですが、フォーム上にコントロールがあると、フォームまでPreviewKeyDownイベントが発生しません。
10
10
 
11
- ただし、フォームのKeyPreviewプロパティをTrueにすると、フォームのKeyDownイベントでEscapeキーを捕捉できるようになります。
11
+ この場合、フォームのKeyPreviewプロパティをTrueにすると、フォームのKeyDownイベントでEscapeキーを捕捉できるようになります。
12
12
 
13
13
 
14
14
 

2

情報の追記

2020/06/11 09:01

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -8,7 +8,13 @@
8
8
 
9
9
  PreviewKeyDownイベントではエスケープキーを捕捉できるのですが、フォーム上にコントロールがあると、フォームまでPreviewKeyDownイベントが発生しません。
10
10
 
11
+ ただし、フォームのKeyPreviewプロパティをTrueにすると、フォームのKeyDownイベントでEscapeキーを捕捉できるようになります。
12
+
13
+
14
+
15
+ ただし、キーによっては上記方法で捕捉できないものがあります。(矢印等)
16
+
11
- こで、以下の記事を参考にして、フォームでエスケープキーを捕捉できるようにしてはどうでしょうか
17
+ のようなキーを捕捉したい場合は、以下の記事を参考にして、フォームで対象キーを捕捉できるようになります
12
18
 
13
19
 
14
20
 
@@ -18,9 +24,7 @@
18
24
 
19
25
 
20
26
 
21
- 私も以下のコードをフォーム内のコードに貼り付けたら、エスケープキーで画面が閉じるようになりました。
22
-
23
- (その代わり元々のエスケープキーの機能はフォーム上で完全失われます。
27
+ 参考までにこれにエスケープキーを適用すると以下ようなります。
24
28
 
25
29
 
26
30
 

1

補足を追加

2020/06/11 09:00

投稿

kenshirou
kenshirou

スコア772

test CHANGED
@@ -1,3 +1,9 @@
1
+ ※フォームがShowDialogで開いていないことを前提とします。
2
+
3
+ (この場合はCancelButtonプロパティの設定でエスケープキーでフォームを閉じることが可能。)
4
+
5
+
6
+
1
7
  KeyDownイベントは、そのままではエスケープキーを捕捉できません。
2
8
 
3
9
  PreviewKeyDownイベントではエスケープキーを捕捉できるのですが、フォーム上にコントロールがあると、フォームまでPreviewKeyDownイベントが発生しません。
@@ -9,3 +15,41 @@
9
15
  [(参考)Buttonコントロールにフォーカスがあるとフォームで矢印キーのキーイベントが発生しない
10
16
 
11
17
  ](https://dobon.net/vb/dotnet/form/keypreview2.html)
18
+
19
+
20
+
21
+ 私も以下のコードをフォーム内のコードに貼り付けたら、エスケープキーで画面が閉じるようになりました。
22
+
23
+ (その代わり、元々のエスケープキーの機能は、このフォーム上で完全に失われます。)
24
+
25
+
26
+
27
+ ```VB
28
+
29
+ <System.Security.Permissions.UIPermission( _
30
+
31
+ System.Security.Permissions.SecurityAction.Demand, _
32
+
33
+ Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
34
+
35
+ Protected Overrides Function ProcessDialogKey( _
36
+
37
+ ByVal keyData As Keys) As Boolean
38
+
39
+ If (keyData And Keys.KeyCode) = Keys.Escape Then
40
+
41
+ Me.Close()
42
+
43
+ 'Escapeキーの本来の処理をさせたくないときは、trueを返す
44
+
45
+ Return True
46
+
47
+ End If
48
+
49
+
50
+
51
+ Return MyBase.ProcessDialogKey(keyData)
52
+
53
+ End Function
54
+
55
+ ```