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

本文关键字:false 设置 true Enabled Textbox TextChange 上将 | 更新日期: 2023-09-27 18:26:32

我以编程方式创建一个具有两个textboxesForm。我的目标是禁用一个textbox如果我在第二个中键入内容,则相反。我设法在第一次textbox文本更改时禁用了第二次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;
        }

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

您只能检查每个事件的 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);
}

self文本框有一些值,那么另一个的启用将为假

首先设置一个标志,以根据引发事件的 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;
    }
}

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

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

采用以下帮助程序方法

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));
相关文章: