C# 文本框焦点

C# Textbox Focus

在 windows 表单 c# 应用程序中,我有两个文本框控件。

我将 tabindex 1 设置为第一个控件 我将 tabindex 2 设置为 secondo control

当我在第一个控件中按下Tab键时,我需要做一些检查操作。

我尝试使用此代码拦截制表键

control1__KeyPress(...)
{
   if (e.KeyChar == (char)Keys.Tab)
    {
     ....
    }
}

但是事件没有触发。

我试着做成

control1__KeyDown(...)
{

}

但该事件也未触发。

如何在第二个控件获得焦点之前拦截 Tab 键?

谢谢

正如我在评论中所说,您应该根据您的要求使用适当的事件处理程序。如果您的意图是在控件失去焦点时收到警报,则有一个 Validating event that could help if your intent is just to validate user input. There is a Leave 事件。

如果您真的只想处理 TAB 键,那么您应该像本例中那样重写 ProcessCmdKey

public class Form1 : System.Windows.Forms.Form
{
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData )
    {
        if( keyData == Keys.Tab)
        {
            // This method will be called for every control in your form
            // so probably you need to add some checking on the Handle
            // of the control that originates the call
            if(msg.Hwnd == yourTextBox.Handle)
            {
                 ExecuteYourTabProcessinLogicHere();

                 // Returning TRUE here halts the normal behavior of the 
                 // TAB key, you could change this based on the result 
                 // of your logic
                 return true; 
            }
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

但是,我应该警告您,乱用 TAB 键可能会让您的用户感到非常不安,因为他们希望此键具有预先定义好的行为