是否KeyDown KeySuppress取消KeyUp事件

本文关键字:KeyUp 事件 取消 KeySuppress KeyDown 是否 | 更新日期: 2023-09-27 18:03:56

假设我有这个:

    private void txtAnalogValue_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            //Non-numeric key pressed => prevent this from being input into the Textbox
            e.SuppressKeyPress = true;
        }
    }

:

    private void txtAnalogValue_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            try
            {
                UpdateState(double.Parse(((TextBox)sender).Text));
            }
            catch (Exception ex)
            {
                ((TextBox)sender).Text = ioElement.StateVal.ToString("0.00");
            }
        }
    }

我知道这段代码没有多大意义,它只是一个测试。问题是:e.p suppresskeypress = true在KeyDown事件对KeyUp事件有影响,所以回车键将不被接受?

是否KeyDown KeySuppress取消KeyUp事件

不,e.SuppressKeyPress = true将忽略Enter键(它不会转到下一行,文本框的Text属性不会被改变),e.Keycode将在KeyUp中可见。因此,抑制KeyDown中的键不会影响KeyUp事件,您的代码应该可以工作。当你在TextBox中点击Enter按钮时,UpdateState将被调用。您可以试试下面的代码来检查:

        private void txtAnalogValue_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A)
            {
                e.SuppressKeyPress = true;
            }
        }
        private void txtAnalogValue_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A)
            {
                MessageBox.Show("Up");
            }
        }