我正在尝试在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无效。任何人都可以帮助我摆脱这个问题?
答案 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
属性。