回答編集履歴
3
表現の修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
KeyDownイベントは、そのままではエスケープキーを捕捉できません。
|
5
5
|
PreviewKeyDownイベントではエスケープキーを捕捉できるのですが、フォーム上にコントロールがあると、フォームまでPreviewKeyDownイベントが発生しません。
|
6
|
-
|
6
|
+
この場合、フォームのKeyPreviewプロパティをTrueにすると、フォームのKeyDownイベントでEscapeキーを捕捉できるようになります。
|
7
7
|
|
8
8
|
ただし、キーによっては上記方法で捕捉できないものがあります。(矢印等)
|
9
9
|
そのようなキーを捕捉したい場合は、以下の記事を参考にして、フォームで対象キーを捕捉できるようになります。
|
2
情報の追記
answer
CHANGED
@@ -3,13 +3,15 @@
|
|
3
3
|
|
4
4
|
KeyDownイベントは、そのままではエスケープキーを捕捉できません。
|
5
5
|
PreviewKeyDownイベントではエスケープキーを捕捉できるのですが、フォーム上にコントロールがあると、フォームまでPreviewKeyDownイベントが発生しません。
|
6
|
-
|
6
|
+
ただし、フォームのKeyPreviewプロパティをTrueにすると、フォームのKeyDownイベントでEscapeキーを捕捉できるようになります。
|
7
7
|
|
8
|
+
ただし、キーによっては上記方法で捕捉できないものがあります。(矢印等)
|
9
|
+
そのようなキーを捕捉したい場合は、以下の記事を参考にして、フォームで対象キーを捕捉できるようになります。
|
10
|
+
|
8
11
|
[(参考)Buttonコントロールにフォーカスがあるとフォームで矢印キーのキーイベントが発生しない
|
9
12
|
](https://dobon.net/vb/dotnet/form/keypreview2.html)
|
10
13
|
|
11
|
-
私も以下のコードをフォーム内のコードに貼り付けたら、エスケープキーで画面が閉じるようになりました。
|
12
|
-
|
14
|
+
参考までに、これにエスケープキーを適用すると、以下のようになります。
|
13
15
|
|
14
16
|
```VB
|
15
17
|
<System.Security.Permissions.UIPermission( _
|
1
補足を追加
answer
CHANGED
@@ -1,6 +1,28 @@
|
|
1
|
+
※フォームがShowDialogで開いていないことを前提とします。
|
2
|
+
(この場合はCancelButtonプロパティの設定でエスケープキーでフォームを閉じることが可能。)
|
3
|
+
|
1
4
|
KeyDownイベントは、そのままではエスケープキーを捕捉できません。
|
2
5
|
PreviewKeyDownイベントではエスケープキーを捕捉できるのですが、フォーム上にコントロールがあると、フォームまでPreviewKeyDownイベントが発生しません。
|
3
6
|
そこで、以下の記事を参考にして、フォームでエスケープキーを捕捉できるようにしてはどうでしょうか。
|
4
7
|
|
5
8
|
[(参考)Buttonコントロールにフォーカスがあるとフォームで矢印キーのキーイベントが発生しない
|
6
|
-
](https://dobon.net/vb/dotnet/form/keypreview2.html)
|
9
|
+
](https://dobon.net/vb/dotnet/form/keypreview2.html)
|
10
|
+
|
11
|
+
私も以下のコードをフォーム内のコードに貼り付けたら、エスケープキーで画面が閉じるようになりました。
|
12
|
+
(その代わり、元々のエスケープキーの機能は、このフォーム上で完全に失われます。)
|
13
|
+
|
14
|
+
```VB
|
15
|
+
<System.Security.Permissions.UIPermission( _
|
16
|
+
System.Security.Permissions.SecurityAction.Demand, _
|
17
|
+
Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
|
18
|
+
Protected Overrides Function ProcessDialogKey( _
|
19
|
+
ByVal keyData As Keys) As Boolean
|
20
|
+
If (keyData And Keys.KeyCode) = Keys.Escape Then
|
21
|
+
Me.Close()
|
22
|
+
'Escapeキーの本来の処理をさせたくないときは、trueを返す
|
23
|
+
Return True
|
24
|
+
End If
|
25
|
+
|
26
|
+
Return MyBase.ProcessDialogKey(keyData)
|
27
|
+
End Function
|
28
|
+
```
|