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

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

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

Re[2]: メニューのショートカットの無効化に関して


(過去ログ 173 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■99601 / inTopicNo.1)  メニューのショートカットの無効化に関して
  
□投稿者/ Ryu-J (1回)-(2022/05/02(Mon) 15:51:30)

分類:[VB.NET/VB2005 以降] 

VB.NET 2019で開発しています。

メニューのショートカットに関する質問です。
MenuStripで階層のメニューを作成し、2段目のコレクションで複数のイベントハンドラを記述しています。
そして全てショートカットでも起動できるように定義しています。
これによりクリックでもショートカットでも通常の動作は問題なく動作しています。

メニューのイメージ
Menu1 ---+ Proc1 (F1)
       + Proc2 (F2)
       + Proc3 (F3)
       + Proc4 (F4)
       + Proc5 (F5)
       + Proc6 (F6)
       + Proc7 (F7)

ある処理中に全ての起動を無効にしたいため、上記のMenu1のEnabledをFalseにしました。
これでクリックできないので、問題ないと思っていたのですが、どうやらF1〜F7のショートカットは有効のままのようです。
Proc1〜Proc7もEnabledをFalseにすればいいのでしょうが、数が多いときなどは間違い防止のため、この方法で行ってきました。
元々VB6でこのような方法で問題なかったので、同じ方法で作成していました。今になって気が付いたもので、方法を探っています。
何か足りない設定があるのか、個々にEnabledを制御するしか方法はないのか?
どなたかわかる方がいましたらご教示下さい。
引用返信 編集キー/
■99603 / inTopicNo.2)  Re[1]: メニューのショートカットの無効化に関して
□投稿者/ Hongliang (1232回)-(2022/05/02(Mon) 17:59:36)
https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/how-to-disable-toolstripmenuitems?view=netframeworkdesktop-4.8
ここのヒントにあるように、サブメニュー項目も無効化、つまりEnabledをFalseに設定する必要があります。
再帰呼び出しを使えば配下の増減を気にすることなくまとめて無効化できます。
ついでに次のような拡張メソッドにしてしまえば便利ですね。

<System.Runtime.CompilerServices.Extension>
Public Sub SetEnabled(ByVal item As ToolStripItem, ByVal enabled As Boolean)
    item.Enabled = enabled
    Dim dd = TryCast(item, ToolStripDropDownItem)
    If Not(dd Is Nothing) Then
        For Each child As ToolStripItem In dd.DropDownItems
            SetEnabled(child, enabled)
        Next
    End If
End Sub

引用返信 編集キー/
■99605 / inTopicNo.3)  Re[2]: メニューのショートカットの無効化に関して
□投稿者/ Ryu-J (2回)-(2022/05/03(Tue) 09:37:26)
No99603 (Hongliang さん) に返信

Hongliang さん
ご教示ありがとうございます。
やはりそうでしたか。このような記事がなかなか見つかりませんでした。
また便利なアイデアまでありがとうございます。
使用させて頂きます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -