【问题标题】:Silverlight (like) Validation in Windows Form appWindows 窗体应用程序中的 Silverlight(类似)验证
【发布时间】: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


【解决方案1】:

如何使用验证事件来更新保存按钮的启用状态?!!

protected virtual void MyTextBox_OnValidating(CancelEventArgs e)
{
     this.SaveButton.Enabled = (Validate(MyTextBox));
}

此外,如果您正在进行验证,我强烈建议您查看MS enterprise library validation 以处理通知用户输入错误的情况。另外,请查看this

【讨论】:

  • 它只是检查数据的字段。非常简单,但在这一点上我们所需要的。没有 SProcs,也没有尝试保存。我添加了RequiredFieldsValid() 方法的示例。
  • 另外,也许我很厚,但您的链接解决方案都没有解决我的“即时”问题,不是吗?
  • @refracted “即时”是什么意思?您是想保持 UI 响应式还是其他什么?
  • 基本上,当他们键入时...如果他们键入的内容使必填字段有效,我希望它启用“保存”按钮,反之亦然。
  • 我不建议在用户提供输入时进行验证,只有在控件失去焦点后才进行验证;否则用户体验会很糟糕。
猜你喜欢
  • 1970-01-01
  • 2013-04-09
  • 2011-08-24
  • 2014-10-07
  • 2021-01-10
  • 2012-11-01
  • 2013-02-19
  • 1970-01-01
相关资源
最近更新 更多