簡體   English   中英

從下一個控件觸發KeyUp事件

[英]KeyUp event firing from next control

我的Windows應用程序中有5個按鈕。 當我單擊箭頭鍵時,焦點將在按鈕之間切換,然后僅

KEYUP

事件觸發。 如何停止呢?

而是訂閱PreviewKeyDown事件。

當焦點位於此控件上時,在按下鍵時在KeyDown事件之前發生。

在按鈕之間移動時, sender參數將包含先前選擇的按鈕。


我找到了一個適合您的解決方案,從這里開始改編。 顯然,MS決定箭頭鍵不會觸發KeyDown事件,因此您無法取消它們。

一種解決方法是,將箭頭鍵指定為普通輸入鍵,就像其他任何鍵一樣。 然后,將觸發KeyDown事件,並且您可以根據需要取消按鈕的按下。

private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right || e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
        e.IsInputKey = true;
}

private void button1_KeyDown(object sender, KeyEventArgs e)
{
    e.Handled = true;
}

您可能需要閱讀該帖子中的其他答案和評論以了解哪種方法最適合您的情況。

在評論中回答您的問題

    void button1_LostFocus(object sender, EventArgs e)
    {
        button1.Focus();
    }

為了防止UpButton 移動焦點,您必須至少使用3種方法:

    bool _focus;

    private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
            _focus = true;
    }

    private void button1_KeyUp(object sender, KeyEventArgs e)
    {
        _focus = false;
    }

    private void button1_Leave(object sender, EventArgs e)
    {
        if(_focus)
            button1.Focus(); // or (sender as Control)
    }

技巧是在用戶按下向上鍵時使用標志,並在“ Leave返回焦點。 您必須在KeyUp取消KeyUp ,否則將無法更改焦點(通過按Tab進入示例)。

您可以在Leave取消標記,但我沒有對其進行測試。

暫無
暫無

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

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