【发布时间】:2010-09-23 14:10:20
【问题描述】:
我需要根据我字段中的数据实时启用/禁用我的“保存”按钮。
以下是完成此任务的可接受方式吗?感觉不对,但我不知道我还能如何做到这一点。
每个用户控件(CRUD Form)都有一个BackgroundWorker和以下相关方法;
StartBGWorker()StopBGWorker()RequiredFieldsValid()
我希望,目的是不言自明的。该过程以这样一种方式进行,即当用户单击“新建”或“编辑”时,它会调用StartBGWorker(),从而创建一个新的BackgroundWorker 并为其调用RunDataASync()。 BGWorker 的DoWork() 方法如下所示:
void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ucNavDiagnosis.btnSave.Enabled = Convert.ToBoolean(e.UserState);
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
bgWorker.ReportProgress(0, RequiredFieldsValid());
System.Threading.Thread.Sleep(500);
}
}
private bool RequiredFieldsValid()
{
// TODO: Add other required fields
return (!memAllergies.Text.Equals(string.Empty));
}
这行得通,但感觉“丛林联盟”。无论如何,当用户点击 SAVE 或 CANCEL 时,会调用 StopBGWorker(),其中 Disposes 是工作人员。
作为进一步的免责声明,此应用目前不使用绑定。这是一个很长的解释,但正如他们所说的那样。
【问题讨论】:
-
如果你澄清你的问题可能会有所帮助。
-
@Lucas B:我很抱歉,我认为这很明显,但我现在明白了它不可能。那个更好吗?感谢您的发言!
-
这肯定是有原因的:为什么不检查RequiredFieldsValid() 每当其中一个控件中的输入变为有效时?
-
@Mario The Spoon:你的意思是挂钩给定表单上所有控件的验证事件?
-
是的,我认为这就是为什么它被称为验证..(老实说,我想在 LostFocus 中添加一些东西,但验证听起来像是解决方案)。我和 Lucas B 一起去,等到用户完成输入。如果你绝对需要,你可以在按键事件或类似事件中挂钩。
标签: c# winforms validation .net-3.5