1

実際のプログラミングで ToolStripTextBox をメニュー項目として使用するには、予想とは異なる動作をするいくつかのクリアランスが必要です。

メニューストリップ項目がほとんどないメニューストリップがあり、その中には1つのテキストボックス項目があります。

1)テキストボックスの使用をENTERキーで終了した後、メニューストリップを閉じたいのですが、方法がわかりません。

私はそれを隠すことができます:

myToolStripMenuItem.HideDropDown()

しかし、マウスを上に移動して自動的に開くと、敏感なままです。もう一度開くにはクリックが必要になるので、閉じたいと思います。

次に、Alt キーでメニューをアクティブにし、選択した項目がそのテキスト ボックスに到達したときに下に移動すると、このテキスト ボックスが入力モードで自動的にスローされ、キーボード ナビゲーションがブロックされます。
これは通常の動作であり、他のメニュー項目と同じように矢印 (上/下) で渡すことができるように、入力モードでテキストボックスを回転させるために SPACE または ENTER が必要になることを回避できますか?

4

2 に答える 2

3

問題がわかりました。問題は、ツールストリップ マネージャーのメニューがまだアクティブな状態であるため、マウスをホバーすると、メニューを選択する代わりに再度開くことです。これを修正するのは非常に困難です。メソッドは内部的なものです。次のように、リフレクションを使用してハッキングできます。

...
using System.Reflection;

    void box_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyData == Keys.Enter) {
            e.Handled = e.SuppressKeyPress = true;
            myToolStripMenuItem.HideDropDown();
            var t = typeof(MenuStrip).Assembly.GetType("System.Windows.Forms.ToolStripManager+ModalMenuFilter", true);
            var mi = t.GetMethod("ExitMenuMode", BindingFlags.Static | BindingFlags.NonPublic);
            mi.Invoke(null, null);
        }
    }

あまりお勧めできません。また、メニューにテキスト ボックスを使用することもお勧めしません。UI のヒントは非常に貧弱で、発見しにくいだけです。

于 2013-02-12T02:24:56.353 に答える
0

私はそれを「閉じよう」とはしません。代わりに、次を使用します。

myToolStripMenuItem.Enabled = false;
myToolStripMenuItem.Visible = false;

次に、動的に再度有効にして、後でマウス イベントまたはキー イベントで表示できるようにします。

于 2013-02-11T21:49:37.633 に答える