我想禁用“提交”按钮,直到2个文本框中包含值。我不完全确定如何解决这个问题。
答案 0 :(得分:3)
由于这是WinForms,您应该监控文本框中的TextChanged
事件并调用更新按钮启用状态的方法(string.IsNullOrEmpty
和string.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函数或运行的函数)文件加载)。