0

所以我想知道是否有人可以给我一个好主意如何做某事。我的应用程序中有一个 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

我希望能够将此功能插入某个地方并对其进行调用,例如

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

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

4

1 回答 1

1

有2种方法

  1. 当大多数控件没有更改事件处理程序时,您的方法似乎是正确的。顺便说一句,在您上面的代码中,您错过Exit ForisDirty = True.
  2. 当大多数控件已更改实现的事件处理程序时(如果您的设计中有数据模型/对象,就会出现这种情况),而不是在循环中检查更改,我更愿意检查何时进行更改。我的意思是声明一个表单级变量bool changedtextbox像, combobox, radiobutton, checkbox, 等等这样的控件大多有他们的改变事件处理程序,如果改变被设置changedTrue.
于 2016-11-18T05:06:11.120 回答