簡體   English   中英

讓 ComboBox 不“使用”F4 鍵

[英]Have a ComboBox not “use” the F4 key

我有一個應用程序,用戶希望 F4 成為“處理訂單”按鈕。 (該鍵執行此功能的歷史悠久。)

今天我發現如果焦點在 ComboBox 中,那么 F4 會使 ComboBox 執行下拉菜單。

有沒有辦法讓它不發生?

更新:我使用 Delphi 嘗試過這個,它也發生在那里。 雖然我仍然很好奇,但這似乎是 Windows 中的“烘焙”。 我將要求用戶選擇另一個快捷方式。

用這個

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

cboTest 是您的 ComboBox 名稱

解決方案:使用這樣的組合框:

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

這就是你想要的。

除了上面的答案之外,這里還有一個無需創建自定義控件的可重用解決方案:

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" />

你是怎么抓住F4鍵的? 如果您使用 keypreview,您可以覆蓋它從冒泡到組合框:

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");
    }
}

默認情況下,F4 鍵打開或關閉組合框的下拉列表。 可以更改此行為以忽略 F4 鍵並使用向下箭頭鍵打開列表。 這是通過將CB_SETEXTENDEDUI發送到提供TRUE參數的組合框來完成的。 這是假設 WPF 實際上在內部使用本機通用控件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM