問題タブ [toolstripdropdown]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 動的に生成されたツールストリップ メニューでは、MenuItem AutoClose = false
したがって、この質問に従って、アイテムをクリックしたときにドロップダウンメニューが閉じないようにする方法に対処しようとしています。
リンクされた質問では、そのような回答の 1 つで、AutoClose
プロパティを false に設定することが提案されました。私はそうしました、そしてこれは私が求めたものを達成しました。ただし、私が実装した方法は、ドロップダウン メニューが強制的に開かれることを意味します。
フォームコード:
AutoClose
私はこれがなぜなのか知っています - 実装は、を true に設定することを許可する方法がないことを意味します。ただし、menuItems は別のクラスで動的に生成されるため、参照するイベントやオブジェクトはありません。
このコードは、メイン フォームからメニュー構造をコピーし、それをコピーして "プロファイル ビュー" に再作成します (ユーザーが表示できるもの/できないものを設定するため)。
コントローラーコード:
メニュー項目をクリックしてもメニューが閉じずAutoClose
、メニュー ヘッダーをクリックしたり、マウスをメニューから離したり、別のメニューを選択したり (またはマウスオーバー)、メニューは閉じる?
これが単純な問題である場合はお詫び申し上げます - 私は約 1 年間ゲームから離れており、これに戻る必要があり、すべてを適切にフォローしているときに少し問題が発生しています。
c# - ToolStripDropDown は、基になるコントロールの前に MouseeDown をキャッチします
ドロップダウン部分にツリーが含まれる独自の ComboBox のようなコントロールを作成しました。通常の ComboBox を使用して WndProc を上書きするこれらのソリューションを見てきましたが、非常に多くのコードにもかかわらず、常に奇妙な動作がありました。そこで、単純にすることにしました。マウスがラベル上に置かれたときに開かれる ToolStripDropDown/ToolStripControlHost を持つラベルだけです。ComboBox の三角形が欠けていても問題ありません。
1 つの小さなことを除いて、すべてが完全に機能します。標準の ComboBox のように、ラベルをもう一度クリックするとドロップダウンが非表示になるようにします。しかし、それをクリックすると、ドロップダウンが一瞬非表示になり、再び表示されます。ラベルの外側をクリックすると、ドロップダウンが非表示になります。
私が見る限り(ブレークポイント)、ドロップダウンは最初に MOUSEDOWN イベントをキャッチして、それ自体を閉じます。その後、ラベルが MOUSEDOWN イベントを通過し、ドロップダウンが閉じられていることがわかるため、ラベルが初めてクリックされたと見なされ、ドロップダウンが再び開きます。
そのため、ラベルは MOUSEDOWN がドロップダウン項目を閉じた結果であるかどうかを知る機会がないようです。1 つおきのイベントで開くこともできますが、その場合、他の終了イベントが発生する必要はありません。
ラベルをクリックしても、開いているドロップダウン項目が確実に閉じるようにする方法はありますか?