如何在 TextChange 上将 Textbox.Enabled 从 false 设置为 true
本文关键字:false 设置 true Enabled Textbox TextChange 上将 | 更新日期: 2023-09-27 18:26:32
我以编程方式创建一个具有两个textboxes
的Form
。我的目标是禁用一个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;
}
您只能检查每个事件的 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));