我有一个包含多行控件的vb.net
Web应用程序。每行都有一个文本框和两个按钮,一个用于保存输入的文本,另一个用于编辑任何现有文本(如果文本在里面,则文本框在其他位置禁用)。
单击编辑将禁用所有控件,并启用相关的保存按钮和文本框以及要编辑的文本。我正在尝试重新启用已禁用的这些控件,并且在成功保存后我使用了一些代码:
If String.IsNullOrEmpty(txtbox2.Text) = True Then
txtbox2.Enabled = True
btnSave2.Enabled = True
Else
btnEdit2.Enabled = True
End If
'enabling textbox and save button if textbox is empty
'or enabling edit button if text exists
If String.IsNullOrEmpty(txtbox3.Text) = True Then
txtbox3.Enabled = True
btnSave3.Enabled = True
Else
btnEdit3.Enabled = True
End If
对于除正在编辑的行之外的每一行,重复这些小的if块(因此每个子行总共5次)。我已经尝试使用每个循环来完成同样的事情,但我不知道如何或是否有一种方法循环,确定文本框是否有文本,如果有,启用该行的编辑按钮,如果没有重新启用该文本框以及同一行上的保存按钮。
我可以轻松地根据需要启用或禁用所有文本框:
Dim ReactivateText() = {txtbox2, txtbox3, txtbox4, txtbox5, txtbox6}
For Each thing In ReactivateText
If TypeOf thing Is TextBox Then
Dim othertext As TextBox = thing
If String.IsNullOrEmpty(othertext.Text) = True Then
othertext.Enabled = True
End If
End If
Next
但即使使用另一个带按钮控件的数组变量或通过将按钮添加到上面的变量,我仍然无法正确启用或禁用按钮。
我还是vb.net
的新手,所以我很好奇是否有人有更优雅,更有程序性的方法来完成这项任务?据我所知,上面简单的原始代码确实按预期工作,所以也许我应该留下足够好的单独。但是,与我的其他应用程序相比,这一点代码对我来说太过简单了,我不得不想象有更好的方法来实现这一点。
答案 0 :(得分:1)
您不需要条件语句,因为您指定了布尔值,只需将其设置为等于(或不等于)条件,如下所示:
txtBox2.Enabled = String.IsNullOrEmpty(txtbox2.Text)
btnSave2.Enabled = txtBox2.Enabled
btnEdit2.Enabled = Not txtBox2.Enabled
就不必为每个控件执行此操作而言,设置一个集合来存储控件,然后像这样迭代它们:
Dim textBoxes() As TextBox = {txtBox2, txtBox3, txtBox4, txtBox5, txtBox6}
Dim saveBtns() As Button = {btnSave2, btnSave3, btnSave4, btnSave5, btnSave6}
Dim editBtns() As Button = {btnEdit2, btnEdit3, btnEdit4, btnEdit5, btnEdit6}
For index As Integer = 0 To textBoxes.Length - 1
textBoxes(index).Enabled = String.IsNullOrEmpty(textBoxes(index).Text)
saveBtns(index).Enabled = textBoxes(index).Enabled
editBtns(index).Enabled = Not textBoxes(index).Enabled
Next