如何在TextChange上将Textbox.Enabled从false设置为true?

时间:2015-12-13 10:36:48

标签: c# winforms dynamic

我以编程方式创建了一个Form,其中包含两个textboxes。如果我在第二个中输入内容并且相反,我的目标是禁用一个textbox。我设法在第一个textbox textchange上禁用第二个textbox,但无法确定在第一个textbox。文本为空时如何启用它。

以下是代码:

private void metaName_TextChanged(object sender,EventArgs e)
    {
        var ctrl = (Control)sender;
        var frm = ctrl.FindForm();

        TextBox metaTxt = null;
        foreach (var ctr in frm.Controls)
        {
            if (ctr is TextBox)
            {
                metaTxt = (TextBox)ctr;
                if (metaTxt.Name == "metaHTTPEquiv")
                {
                    metaTxt.Enabled = false;
                }
                else
                    if (?)
                    {

                    }
            }
        }
    }

我想做这样的事情:

if(textBox3.Text == String.Empty)
        {
            textBox4.Enabled = true;
        }
        else
            if(textBox3.Text != String.Empty)
        {
            textBox4.Enabled = false;
        }

3 个答案:

答案 0 :(得分:3)

您只能检查每个的textchanged事件,如下所示:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    textBox2.Enabled = !(textBox1.Text.Length >= 1);
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    textBox1.Enabled = !(textBox2.Text.Length >= 1);
}

自我文本框有一些值,然后另一个

的启用将为false

答案 1 :(得分:2)

首先设置一个标志,根据提升事件的metaName文本框的内容启用或禁用第二个控件,然后使用一点Linq搜索第二个文本框。

private void metaName_TextChanged(object sender,EventArgs e)
{
    TextBox ctrl = sender as TextBox;
    if(ctrl != null)
    {
         bool enable = !string.IsNullOrEmpty(ctrl.Text);
         TextBox secondOne = this.Controls
                       .OfType<TextBox>()
                       .FirstOrDefault(x => x.Name == "metaHTTPEquiv");
        if(secondOne != null)
           secondOne.Enabled = enable;
    }
}

反转文本框角色的相同代码可以用作第二个文本框的事件处理程序。

答案 2 :(得分:0)

忘记控制事件并使用数据绑定

采取以下帮助方法

static void Bind(Control target, string targetProperty, object source, string sourceProperty, Func<object, object> expression)
{
    var binding = new Binding(targetProperty, source, sourceProperty, true, DataSourceUpdateMode.Never);
    binding.Format += (sender, e) => e.Value = expression(e.Value);
    target.DataBindings.Add(binding);
}

并在表单加载事件中添加类似的内容

Bind(textBox2, "Enabled", textBox1, "Text", value => string.IsNullOrEmpty((string)value));