How to set Textbox.Enabled from false to true on TextChange?

无人久伴 提交于 2019-12-12 02:28:35

问题


I programmatically create a Form with two textboxes. My goal is to disable one textbox if I type something in the second one and contrariwise. I managed to disable second textbox on first textbox textchange,but can't figure out how enable it when the first textbox.Text is empty.

Here is the code :

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 (?)
                    {

                    }
            }
        }
    }

I want to make something like this :

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

回答1:


First set a flag to enable or disable the second control based on the content of the metaName textbox that raises the event, then search for the second textbox using a bit of 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;
    }
}

The same code, reversing the textboxes roles, could be used as the event handler of the second textbox.




回答2:


You can check only the textchanged event for each one like the following:

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);
}

The self textbox has some values, then the enabled will be false for the other one




回答3:


Forget about control events and use data binding.

Take the following helper method

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);
}

and just add something like this in your form load event

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


来源:https://stackoverflow.com/questions/34250176/how-to-set-textbox-enabled-from-false-to-true-on-textchange

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!