2

ユーザーがF4を[注文の処理]ボタンにしたいと思っているアプリケーションがあります。(この機能を実行するキーには長い歴史があります。)

今日、フォーカスがComboBoxにある場合、F4によってComboBoxにドロップダウンが実行されることがわかりました。

それを起こさないようにする方法はありますか?

更新: Delphiを使用してこれを試しましたが、そこでも発生します。私はまだ興味がありますが、これは「焼き付けられた」Windowsのことのようです。ユーザーに別のショートカットを選択するように依頼します。

4

5 に答える 5

3

これを使って

cboTest.PreviewKeyDown += (o,e) => {
    if (e.Key == Key.F4)
        e.Handled = true;
};

cboTestはComboBox名です

于 2013-01-07T19:56:18.077 に答える
2

解決策:次のようなコンボボックスを使用します。

  public class myComboBox : ComboBox
    {
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.Key != Key.F4)
            {
                base.OnKeyDown(e);
            }
        }
    }

これがあなたが望むすべてです。

于 2018-01-07T12:05:41.387 に答える
2

上記の回答に加えて、カスタムコントロールを作成する必要のない再利用可能なソリューションを次に示します。

public static class ComboBoxHelper
{
    public static readonly DependencyProperty DisableF4HotKeyProperty =
        DependencyProperty.RegisterAttached("DisableF4HotKey", typeof(bool),
            typeof(ComboBoxHelper), new PropertyMetadata(false, OnDisableF4HotKeyChanged));

    public static bool GetDisableF4HotKey(DependencyObject obj)
    {
        return (bool)obj.GetValue(DisableF4HotKeyProperty);
    }

    public static void SetDisableF4HotKey(DependencyObject obj, bool value)
    {
        obj.SetValue(DisableF4HotKeyProperty, value);
    }

    private static void OnDisableF4HotKeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var box = d as ComboBox;
        if (d == null) return;

        box.PreviewKeyDown -= OnComboBoxKeyDown;
        box.PreviewKeyDown += OnComboBoxKeyDown;
    }

    private static void OnComboBoxKeyDown(object _, KeyEventArgs e)
    {
        if (e.Key == System.Windows.Input.Key.F4)
        {
            e.Handled = true;
        }
    }
}

xamlファイルで、ComboBoxHelperクラスに名前空間参照を追加し、ComboBoxに添付プロパティを設定します。

 <ComboBox h:ComboBoxHelper.DisableF4HotKey="True" />
于 2020-10-27T10:48:33.630 に答える
1

F4キーをどのようにキャッチしていますか?キープレビューを使用する場合は、バブリングからコンボボックスまでオーバーライドできます。

private void Form1_Load(object sender, EventArgs e)
{
    this.KeyPreview = true;
    this.KeyDown += new KeyEventHandler(Form1_KeyDown);
}

void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F4)
    {
        e.Handled = true;
        MessageBox.Show("F4 Pressed");
    }
}
于 2013-01-07T20:25:11.407 に答える
-1

デフォルトでは、F4キーはコンボボックスのドロップダウンリストを開いたり閉じたりします。この動作は、F4キーを無視し、代わりに下矢印キーを使用してリストを開くように変更できます。これは、パラメータCB_SETEXTENDEDUIを提供するコンボボックスにを送信することによって行われTRUEます。これは、WPFが実際にネイティブの共通コントロールを内部で使用していることを前提としています。

于 2013-01-08T16:26:59.860 に答える