【问题标题】:Validate if any changes were made in TabPage验证是否在 TabPage 中进行了任何更改
【发布时间】:2017-04-01 12:52:30
【问题描述】:

所以我想知道是否有人可以给我一个好主意如何做某事。我的应用程序中有一个 tabControl - 我加载了一个页面 - TabPage1 - 大约有 25-30 个字段。在加载所有数据时 - 我运行一个循环将每个控制值保存到 .tag。我还有一个名为 isDirty() 的函数,它基本上检查每个控件的 ctr.tag.tostring ctr.text。我很难弄清楚如何构建一个快速处理程序来检查表单上的所有控件。我尝试使用 TagPage1.Validating,但这并没有做任何事情。

我的 isDirty() 函数看起来像这样......

    Private Function isDirty() As Boolean

    isDirty = False

    For Each ctr As Control In TabPage1.Controls
        If TypeOf ctr Is TextBox And ctr.Enabled = True Then
            If ctr.Tag.ToString <> ctr.Text Then
                isDirty = True
            End If
        End If
        'more if statements for comboboxes and such
      Next
    End Function

我希望能够将此功能插入某个地方并对其进行 CALL 之类的操作

 if isDirty() then
    MsgBox "You have made a change to this form"
 End if

我必须在每个控件的选择更改时调用它吗?

【问题讨论】:

  • NET 提供者和助手对象将为您完成所有。如果他们不这样做,我会采用 OOP 方法并创建一个跟踪更改的类(Cust、Order、Eno...whatever)或 ORM。

标签: vb.net dirty-data


【解决方案1】:

有两种方法

  1. 当大多数控件没有更改事件处理程序时,您的方法似乎是正确的。顺便说一句,在您上面的代码中,您在isDirty = True 之后错过了Exit For。
  2. 当大多数控件已更改实现事件处理程序时(如果在您的设计中您有数据模型/对象,就会出现这种情况),而不是在循环中检查更改,我更愿意检查何时进行更改。我的意思是声明一个表单级变量bool changed。 textbox、combobox、radiobutton、checkbox 等控件大多具有更改事件处理程序,如果进行更改,则将 changed 设置为 True。

【讨论】:

  • 我知道我只是想在一个事件处理程序中找到一种方法,有点像 _validating evemt 我想我可以试试
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2013-08-06
相关资源
最近更新 更多