我想制作一个IF语句,检查表单中的所有文本框是否都已更改。我不想一个一个地检查。我可以在vb.net中使用一个简单的IF THEN子句检查所有文本框吗?
答案 0 :(得分:3)
这是你在VB.NET中可以做的。
首先,您需要一个函数来返回Form(或ContainerControl)中的所有TextBox控件。由于明白的原因,我希望函数实际返回一个Dictionary,每个TextBox的名称作为键,如下所示:
Private Function getAllTextBoxes(ByVal container As ContainerControl) As Dictionary(Of String, TextBox)
Dim allTextBoxes As New Dictionary(Of String, TextBox)
For Each ctrl As Control In container.Controls
If TypeOf ctrl Is TextBox Then allTextBoxes.Add(ctrl.Name, ctrl)
Next
Return allTextBoxes
End Function
接下来,您需要一个函数来返回在每个TextBox中提供值的Dictionary,以便您可以确定哪些值已更改:
Private Function getTextBoxValues(ByVal textBoxDefs As IDictionary(Of String, TextBox)) As Dictionary(Of String, String)
Dim textBoxValues As New Dictionary(Of String, String)
For Each tbxDef As KeyValuePair(Of String, TextBox) In textBoxDefs
Dim tbx As TextBox = tbxDef.Value
Dim name As String = tbx.Name
Dim value As String = tbx.Text
textBoxValues.Add(name, value)
Next
Return textBoxValues
End Function
最后,如果我正确理解了您的问题,您希望函数遍历每个TextBox,将其值与之前记录的值进行比较,如果所有值都已更改,则返回True。这样就可以了:
Private Function getAllTextBoxValuesChanged() As Boolean
Dim allTextBoxes As Dictionary(Of String, TextBox) = getAllTextBoxes(Me)
Static allTextBoxPreviousValues As Dictionary(Of String, String) = getTextBoxValues(allTextBoxes)
Dim allTextBoxCurrentValues As Dictionary(Of String, String) = getTextBoxValues(allTextBoxes)
Dim numTextBoxes As Integer = allTextBoxes.Count
Dim numChangedValues As Integer = 0
Dim modifications As New Dictionary(Of String, String)
For Each tbxDef As KeyValuePair(Of String, String) In allTextBoxCurrentValues
Dim name As String = tbxDef.Key
Dim currentValue As String = tbxDef.Value
Dim previousValue As String = allTextBoxPreviousValues(name)
If currentValue <> previousValue Then
numChangedValues += 1
modifications.Add(name, currentValue)
End If
Next
For Each modificationDef As KeyValuePair(Of String, String) In modifications
allTextBoxPreviousValues(modificationDef.Key) = modificationDef.Value
Next
Return (numChangedValues >= numTextBoxes)
End Function
请记住,由于上面的函数使用了一个静态变量,所以如果自上次调用之后所有值都发生了变化,它将只返回true。此外,第一次调用该函数时,它将返回false。 (但如果需要,可以很容易地改变这种行为。)
有了这些功能,只要您想检查所有值是否都已更改(自上次检查后),您就可以写下:
Dim allTextBoxValuesChanged As Boolean = getAllTextBoxValuesChanged()
If allTextBoxValuesChanged Then
DoSomething()
End If
答案 1 :(得分:1)
没有简单的解决方案。你可以做的是编写一个方法,它根据它在容器控件上循环时处理的文本框的值返回一个布尔值,检查控件是否是一个文本框,以及是否检查它是否有值。
答案 2 :(得分:1)
好吧,你可以在最初加载表单时存储每个文本框的.text值控制表单(可能存储在数组中),然后执行if评估(如你所述)比较当前.text值对阵列的每个文本框。这对您的情况有用吗?
答案 3 :(得分:1)
如果表单代表您应用的“设置”
答案 4 :(得分:0)
或者您可以在每个复选框上放置一个JavaScript“onchange”事件,并使用它来设置隐藏字段“aCheckboxChanged()”或其他东西,将隐藏变量从零设置为1.