禁用按钮直到textBox有效C#

时间:2011-01-27 22:15:22

标签: c# winforms

我想禁用“提交”按钮,直到2个文本框中包含值。我不完全确定如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

由于这是WinForms,您应该监控文本框中的TextChanged事件并调用更新按钮启用状态的方法(string.IsNullOrEmptystring.IsNullOrWhiteSpace在此处有用)。

以下示例显示了一个简单的情况,您希望在启用按钮之前在文本框中显示内容。

private void OnTextChanged(object sender, EventArgs args)
{
    UpdateUserInterface();
}

private void UpdateUserInterface()
{
    this.myButton.Enabled = !string.IsNullOrWhiteSpace(this.textBox1.Text) &&
                            !string.IsNullOrWhiteSpace(this.textBox2.Text);
}

如果您想要做一些更复杂和耗时的事情来确定启用状态,您可能需要考虑延迟按钮状态更新的内容,直到键入完成为止。例如,每次TextChanged事件被触发并在其最终调用Tick方法的UpdateUserInterface事件处理程序中停止时,会重新启动具有较小间隔的计时器。

旁注
由于学习这是一个WinForms应用程序,我已经将以下几点降级为那些寻找此信息的人的旁注。

对于WPF,您可以使用类似的方法或使用一些具有适当值转换器的狡猾绑定。我建议保持简单。

对于ASP.NET,这可以通过javascript在客户端完成 - 附加到文本框的onChange事件并测试值*。

**感谢Oded获取额外信息。*

答案 1 :(得分:2)

在Winfoems或WPF中,使用单个处理程序挂钩两个TextBox的TextChanged事件。在那个处理程序中,查看两个TextBox的当前Text(尽管不要太深入,因为事件在每次击键时触发,因此深入验证会减慢UI响应),如果文本不为空或只有空格,启用按钮;否则,禁用它。

在ASP.NET中,您需要使用JavaScript。 DOM中的文本框有一个类似的OnChanged事件,您可以为其分配一个Javascript函数,该函数将执行与WinForms类似的工作。要小心,因为浏览器可以在禁用JavaScript的情况下运行,因此您仍然需要在服务器端检查null并确保默认情况下不禁用该按钮(仅通过JavaScript,使用OnChanged函数或运行的函数)文件加载)。