c# 获取回车后光标所在位置的控件名称或者tabindex

时间:2022-12-17 16:18:21
 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Enter &&
             ((
             !(ActiveControl is System.Windows.Forms.TextBox) ||
             !((System.Windows.Forms.TextBox)ActiveControl).AcceptsReturn)
             ))
            {

                foreach (Control c in this.Controls)
                {
                     if (c.Focused)   //c   is   focused 
                     {
                        MessageBox.Show(c.Name);
                        break;
                     }
                }  
                SendKeys.SendWait("{Tab}");
                return true;
            }
            if (keyData == (Keys.Enter | Keys.Shift))
            {
                SendKeys.SendWait("+{Tab}");
                return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        } 

各位大侠,我在以上代码中判断光标所在位置获取控件名称,但是不请作用:
 foreach (Control c in this.Controls)
                {
                     if (c.Focused)   //c   is   focused 
                     {
                        MessageBox.Show(c.Name);
                        break;
                     }
                }  
就是这里,请高手指点

7 个解决方案

#1


用this.ActiveControl试试

#2


引用 1 楼 bdmh 的回复:
用this.ActiveControl试试

貌似 不行 大哥能否给个实例

#3


分太低没人帮忙吗?

#4


你的代码显示是用驾车键激发的啊,按回车键就会显示它的名称了

#5


引用 4 楼 zhouwc520 的回复:
你的代码显示是用驾车键激发的啊,按回车键就会显示它的名称了

请问怎么显示呢?

#6


首先你需要设置窗体的属性:

     this.KeyPreview = true;  //将窗体中的按键注册到窗体


然后你编写窗体的 keyPress事件 代码如下



 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                string activeControlName = this.ActiveControl.Name;  //获取当前活动控件的控件名
             
            }
        }


我在VS2008下测试可以获取

#7


引用 6 楼 neumik 的回复:
首先你需要设置窗体的属性:

C# code


     this.KeyPreview = true;  //将窗体中的按键注册到窗体



然后你编写窗体的 keyPress事件 代码如下


C# code



 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
       ……


程序执行后不进入Form1_KeyPress事件里面来啊

#1


用this.ActiveControl试试

#2


引用 1 楼 bdmh 的回复:
用this.ActiveControl试试

貌似 不行 大哥能否给个实例

#3


分太低没人帮忙吗?

#4


你的代码显示是用驾车键激发的啊,按回车键就会显示它的名称了

#5


引用 4 楼 zhouwc520 的回复:
你的代码显示是用驾车键激发的啊,按回车键就会显示它的名称了

请问怎么显示呢?

#6


首先你需要设置窗体的属性:

     this.KeyPreview = true;  //将窗体中的按键注册到窗体


然后你编写窗体的 keyPress事件 代码如下



 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                string activeControlName = this.ActiveControl.Name;  //获取当前活动控件的控件名
             
            }
        }


我在VS2008下测试可以获取

#7


引用 6 楼 neumik 的回复:
首先你需要设置窗体的属性:

C# code


     this.KeyPreview = true;  //将窗体中的按键注册到窗体



然后你编写窗体的 keyPress事件 代码如下


C# code



 private void Form1_KeyPress(object sender, KeyPressEventArgs e)
       ……


程序执行后不进入Form1_KeyPress事件里面来啊