How to intercept the TAB key press to prevent standard focus change in C#

后端 未结 5 848
伪装坚强ぢ
伪装坚强ぢ 2021-01-19 04:36

Normally when pressing the TAB key you change the focus to the next control in the given tab order. I would like to prevent that and have the TAB key do something else. In m

5条回答
  •  半阙折子戏
    2021-01-19 05:23

    Based on JRS's suggestion of using the PreviewKeyDown event, this sends the key press through to the control:

    private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Tab)
            e.IsInputKey = true;
    }
    

    Then you can handle the control's KeyDown event if you want to customise the behaviour:

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Tab)
        {
            MessageBox.Show("The tab key was pressed while holding these modifier keys: "
                    + e.Modifiers.ToString());
        }
    }
    

    TextBoxBase alternative

    If the control is derived from TextBoxBase (i.e. TextBox or RichTextBox), with the Multiline property set to true, then you can simply set the AcceptsTab property to true.

    TextBoxBase.AcceptsTab Property

    Gets or sets a value indicating whether pressing the TAB key in a multiline text box control types a TAB character in the control instead of moving the focus to the next control in the tab order.

提交回复
热议问题