如何在C#中更改我的某个文本框时启用按钮?

时间:2017-02-21 11:04:28

标签: c# winforms events

今天我在开发过程中遇到了问题。

我有一个像这样的Windows窗体:

Windows Form

我需要启用按钮" Appliquer"当我的一个文本框的内容发生变化时。 我知道我可以将KeyPress事件放在每个文本框上并启用我的按钮。在这个窗口中可以很容易地做到这一点,因为只有10个文本框,但我有另一个窗口,其中包含100个文本框,我认为有更好的解决方案。

我尝试将Keydown事件直接放在我的Windows窗体中,但它不起作用。 所以我的问题是,我该怎么做呢。如果有人有想法?

提前谢谢!

托马斯

2 个答案:

答案 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