C# winform 如何获得当前窗体正处于输入状态的控件?窗体上有几个用户控件,用户控件里面有几个文本框,如何获取正处于输入状态的控件(文本框)呢???this.ActiveControl获取到的是用户控件,没有获取到文本框。如何获取啊???

解决方案 »

  1.   

    既然你的 this.ActiveControl 可以取到用户控件那么在用户控件里面的this.ActiveControl 就可以取到下一层的活动控件了啊 用个递归就可以啦
      

  2.   

    this.ActiveControl.ActiveControl 
    用递归就可以了
      

  3.   

    this.ActiveControl返回一个Control对象,界面上的控件都从Control继承
    如果有必要你可以判断这个控件的类型,比如:
    Control ctrl =this.ActiveControl;
    if (ctrl is TextBox)
    {}
    else if (ctrl is ComboBox)
    {}
      

  4.   

    能不能一步到位啊?譬如发送窗口消息之类的。别人都能从不同的程序获取输入焦点,更何况是在本程序中获取呢?递归的做法虽然可以,但太麻烦了。另外不能这样子的this.ActiveControl.ActiveControl,要逐个判断是否是可以ActiveControl。好麻烦啊
      

  5.   

    不用递归,直接this.ActiveControl获取活动控件。
      

  6.   

    可以使用GetFocus这个API函数获得焦点控件的句柄,再转换为Control即可。
    [DllImport("user32.dll")]
    private static extern IntPtr GetFocus();public Control GetFocusedControl()
    {
      IntPtr hwnd = GetFocus();
      Control ctl = Control.FromHandler(hwnd);
      return ctl;
    }
      

  7.   

    太感谢effun了,这就是我想要的结果