2010-09-23 53 views
0

我需要根据我的字段中的数据实时启用/禁用我的SAVE按钮。Silverlight(如)在Windows窗体应用程序验证

以下是完成此操作的可接受方法吗?感觉不对,但我不知道我能做到这一点。

每个用户控件(CRUD表格)具有BackgroundWorker及以下相关方法;

  • StartBGWorker()
  • StopBGWorker()
  • RequiredFieldsValid()

有目的不言自明,我希望。该过程如此进行,以至于当用户点击NEW或EDIT时,它将拨打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

作为进一步免责声明,此应用程序目前不使用绑定。这是一个长时间的解释,但正如他们所说的那样。

+0

如果你澄清你的问题,这可能会有所帮助。 – 2010-09-23 15:00:02

+0

@Lucas B:我的道歉,我认为很明显,但我现在看到它不可能。那个更好吗?感谢您的发言! – 2010-09-23 15:06:59

+0

确实有一个原因:为什么不检查RequiredFieldsValid(),只要其中一个控件的输入变为有效? – 2010-09-23 15:20:52

回答

1

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

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

同样,如果你正在做的验证,我强烈建议寻找到MS enterprise library validation处理告知输入错误的用户。另外,请查看this

+0

它只是检查数据的字段。非常简单,但我们需要在这一点上。没有SProcs并且没有尝试保存。我添加了一个'RequiredFieldsValid()'方法的例子。 – 2010-09-23 15:41:58

+0

另外,也许我很厚,但是你的链接解决方案都不能解决我的“即时”问题,不是吗? – 2010-09-23 15:59:06

+0

@refracted“在飞”意味着什么?你是否试图保持UI的响应,或其他? – 2010-09-23 16:24:40

相关问题