C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

アクセスキーがAltを押さなくても反応する /らんぱっぱ (24/01/26(Fri) 13:03) #102893
Re[1]: アクセスキーがAltを押さなくても反応する /kiku (24/01/26(Fri) 13:20) #102894
Re[1]: アクセスキーがAltを押さなくても反応する /WebSurfer (24/01/26(Fri) 13:22) #102895
  └ Re[2]: アクセスキーがAltを押さなくても反応する /らんぱっぱ (24/01/26(Fri) 13:25) #102896
    └ Re[3]: アクセスキーがAltを押さなくても反応する /とくま (24/01/26(Fri) 14:15) #102897
      └ Re[4]: アクセスキーがAltを押さなくても反応する /Hongliang (24/01/26(Fri) 15:20) #102898
        └ Re[5]: アクセスキーがAltを押さなくても反応する /らんぱっぱ (24/01/26(Fri) 16:33) #102899 解決済み


親記事 / ▼[ 102894 ] ▼[ 102895 ]
■102893 / 親階層)  アクセスキーがAltを押さなくても反応する
□投稿者/ らんぱっぱ (1回)-(2024/01/26(Fri) 13:03:08)

分類:[.NET 全般] 

vb.netにて
アクセスキーを設定しているのですが
altを押下しなくてもアルファベットキー(Z)を押下しただけでクリックしたのと同じ動作になってしまいます。
altを押下しないといけないようにするにはどうすればいいでしょうか?

また原因はなんでしょうか?そういう仕様?

ボタンプロパティのTextに
実行(&Z)と書いています。
[ □ Tree ] 返信 編集キー/

▲[ 102893 ] / 返信無し
■102894 / 1階層)  Re[1]: アクセスキーがAltを押さなくても反応する
□投稿者/ kiku (403回)-(2024/01/26(Fri) 13:20:28)
No102893 (らんぱっぱ さん) に返信
> vb.netにて
> アクセスキーを設定しているのですが
> altを押下しなくてもアルファベットキー(Z)を押下しただけでクリックしたのと同じ動作になってしまいます。
> altを押下しないといけないようにするにはどうすればいいでしょうか?
>
> また原因はなんでしょうか?そういう仕様?
>
> ボタンプロパティのTextに
> 実行(&Z)と書いています。

下記のようにメニューに対してのアクセスキーであればaltを押下する必要があるようです。
ボタンで試したところ、確かにalt無しで実行されるようです。
※確認環境.NETFramework4.8.1、WinFormアプリ
https://dobon.net/vb/dotnet/control/menustrip.html

[ 親 102893 / □ Tree ] 返信 編集キー/

▲[ 102893 ] / ▼[ 102896 ]
■102895 / 1階層)  Re[1]: アクセスキーがAltを押さなくても反応する
□投稿者/ WebSurfer (2883回)-(2024/01/26(Fri) 13:22:16)
No102893 (らんぱっぱ さん) に返信

何を作っているのかと開発環境ぐらいは書きましょう。
[ 親 102893 / □ Tree ] 返信 編集キー/

▲[ 102895 ] / ▼[ 102897 ]
■102896 / 2階層)  Re[2]: アクセスキーがAltを押さなくても反応する
□投稿者/ らんぱっぱ (2回)-(2024/01/26(Fri) 13:25:27)
2024/01/26(Fri) 13:46:22 編集(投稿者)
2024/01/26(Fri) 13:27:02 編集(投稿者)
2024/01/26(Fri) 13:26:54 編集(投稿者)

No102895 (WebSurfer さん) に返信
> ■No102893 (らんぱっぱ さん) に返信
>
> 何を作っているのかと開発環境ぐらいは書きましょう。

開発環境は
Windows10
.net framework4.8
visual studio2019
vbのフォームアプリケーション

ボタンを押されたときにテキストに文字をいれるようなものです。
[ 親 102893 / □ Tree ] 返信 編集キー/

▲[ 102896 ] / ▼[ 102898 ]
■102897 / 3階層)  Re[3]: アクセスキーがAltを押さなくても反応する
□投稿者/ とくま (1回)-(2024/01/26(Fri) 14:15:29)
2024/01/26(Fri) 15:07:43 編集(投稿者)

No102896 (らんぱっぱ さん) に返信

https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/how-to-create-access-keys-for-windows-forms-controls?view=netframeworkdesktop-4.8

ボタンにもアクセスキーは設定できて、Altと組み合わせて実行できるって書いてあるのに。。。Microsoftぇ

とりあえず、手元にあるVS2008とVS2015でもAlt無しで実行されました。
メニューには設定したことあるけど、ボタンに設定したことなくて気づかなかったなぁ。
※テキストボックスに入力中にも実行されたらやばくない?と思って実行したら、テキストボックス入力中はAltが必要っぽいです。
 つまり、画面のアクセスキー可能状態にする=Altっていう仕様っぽい
 ボタンにフォーカス時に必要ないのはなんだかなぁって動きに思えるけど、仕様と言われて済まされそうな動きですね。


ざっくり考えてみたけど、
【パターン1】
アクセスキーを設定しないで、ボタンのテキストはアンダーバー無し(a)とかで誤魔化して
・キーボード押下イベントを拾って条件を満たした時、プログラムからボタンの関数を呼んでやる。

【パターン2】
アクセスキーを設定したままのボタンイベントで
・全てのキーが押されていないとき→実行
・Alt押されている→実行
・Alt押されていない
 →自分にフォーカスがあるかつ、EnterまたはSpace押下→実行
 →自分にフォーカスが無いかつ、EnterまたはSpace押下→はじく
とか???

うん。面倒そう。
[ 親 102893 / □ Tree ] 返信 編集キー/

▲[ 102897 ] / ▼[ 102899 ]
■102898 / 4階層)  Re[4]: アクセスキーがAltを押さなくても反応する
□投稿者/ Hongliang (1297回)-(2024/01/26(Fri) 15:20:45)
そもそもの話として、Windowsのアクセラレータキー標準の動作ではあります。
例えばメモ帳を開き、Ctrl+Fで検索ウィンドウを出して、
「折り返しあり」などにキーボードフォーカスを移しておいて、
FやCを入力すると、対応するボタンやチェックボックスが反応します。

標準動作なので妨げるのはお勧めしません。
敢えて止めるのであれば、FormクラスでProcessMnemonicメソッドをOverridesして、
Control.ModifierKeysにAltが立っていなければ処理しない、というようにすればよさそうです。
(他の修飾キーの手当ても考える必要があるかも)

Protected Overrides Function ProcessMnemonic(ByVal charCode As Char) As Boolean
    If (Control.ModifierKeys And Keys.Alt) = Keys.None Then
        Return False
    End If
    Return MyBase.ProcessMnemonic(charCode)
End Function

[ 親 102893 / □ Tree ] 返信 編集キー/

▲[ 102898 ] / 返信無し
■102899 / 5階層)  Re[5]: アクセスキーがAltを押さなくても反応する
□投稿者/ らんぱっぱ (3回)-(2024/01/26(Fri) 16:33:02)
皆さま、ご回答ありがとうございます。

アクセスキーの使用をやめてKeyDownイベントで処理するように致します。
解決済み
[ 親 102893 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -