从自定义控制自动聚焦到下一个主动控制

时间:2014-01-04 17:09:59

标签: c# winforms

我正在尝试在WinForm中构建TextBox自定义控件。我想在我的WinForms项目中使用此自定义控件或DLL。我正在尝试,如果我在自定义控件中输入长度为2的内容,则程序将关注下一个可用控件。 我的dll或自定义控制代码如下:

using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace cInputNumBox
{
    public partial class cInputNumBox : TextBox
    {
    private Int16 Val_Len;

        public Int16 ValueLength
        {
            get
            {
                return Val_Len;
            }
            set
            {
                Val_Len = value;
            }
        }

        protected override void OnLeave(EventArgs e)
        {
            base.BackColor = System.Drawing.Color.White;
            base.OnLeave(e);
        }

       protected override void OnEnter(EventArgs e)
        {
            base.BackColor = System.Drawing.Color.SkyBlue;
            base.OnEnter(e);
        }

        protected override void OnTextChanged(EventArgs e)
        {
            if (base.Text.Length == ValueLength)
            {
                ContainerControl cntrl = new ContainerControl();
                SelectNextControl(cntrl.ActiveControl, true, true, true, true);
            }
            base.OnTextChanged(e);
        }

    }
}  

我想将此自定义控件用于另一个项目,在该项目中,焦点将在输入内容后自动显示。 到目前为止,我已经尝试过,但OnTextChanged无效。任何人都可以帮助我摆脱这个问题?

1 个答案:

答案 0 :(得分:1)

您必须作为第一个参数传递的控件是开始搜索的控件。由于这是您的控制权,请通过this

SelectNextControl(this, true, true, true, true);

在这种情况下,您还可以指定等于当前控件(ActiveControl)的this。获取当前表单的ActiveControl属性:

SelectNextControl(FindForm().ActiveControl, true, true, true, true);

如果您在ContainerControl中创建新的ContainerControl cntrl = new ContainerControl();,那么这个将为空,并且不会找到任何下一个控件。 Form来自ContainerControl,因此也有ActiveControl属性。