今天我在开发过程中遇到了问题。
我有一个像这样的Windows窗体:
我需要启用按钮" Appliquer"当我的一个文本框的内容发生变化时。 我知道我可以将KeyPress事件放在每个文本框上并启用我的按钮。在这个窗口中可以很容易地做到这一点,因为只有10个文本框,但我有另一个窗口,其中包含100个文本框,我认为有更好的解决方案。
我尝试将Keydown事件直接放在我的Windows窗体中,但它不起作用。 所以我的问题是,我该怎么做呢。如果有人有想法?
提前谢谢!
托马斯
答案 0 :(得分:1)
由于您的表单中已有100多个文本框。我假设表演不是你的问题。
在表单构造函数中,调用此方法。它会将事件附加到表单中的所有文本框控件。内部子控件,如组框,面板等(如果需要)
可能有更好的迭代方式..
public Form1()//your constructor
{
InitializeComponent();
AttachEvent(this);
}
void AttachEvent(Control CTrl)
{
foreach (Control c in CTrl.Controls)
{
if (c is TextBox)
{
c.TextChanged += new EventHandler(c_TextChanged);
continue;
}
if (c.HasChildren)
{
AttachEvent(c);
}
}
}
void c_TextChanged(object sender, EventArgs e)
{
//Your Code here btnGo.Enabled = !btnGo.Enabled;
}
答案 1 :(得分:0)
您可以做的是扩展TextBox
使字段(可从设计人员访问)将TextBox
绑定到其他控件中。
public class MeTextBox
: TextBox
{
public override string Text
{
get { return base.Text; }
set
{
if ( m_DependantControl != null )
{
m_DependantControl.Enabled = !string.IsNullOrWhiteSpace(value);
}
base.Text = value;
}
}
Control m_DependantControl;
[Browsable(true)]
public Control DependantControl
{
get { return m_DependantControl; }
set { m_DependantControl = value; }
}
}
现在,您可以将MeTextBox
用作常规TextBox
。如果你想让它控制其他Enabled
的{{1}}标志,你可以指定设计师可以访问的Control
属性。
将此功能纳入您的示例(代码):
DependantControl
如果您不想在代码中创建它,您可以直接使用设计器。
为了使其相反(一个按钮依赖于许多文本框),您可以扩展// assume you have a Button named btnConfirm
// and want to enable this button only when your `TextBox` has some text
MeTextBox mtb = new MeTextBox();
mtb.DependantControl = btnConfirm;
对象:
Button