我创建了一个翻译表单的函数。我可以循环遍历表单中的每个控件来调用此函数,但我已经做了一个情况,我无法处理。 在我的一个表单中,我在groupbox中有groupbox。 如果我只有一个组合框,则此源可用。
Public Function translate_form(ByVal form As Form)
Dim control As Object
Dim controlname As String
form.Text = Get_Control_Name(form.Name, "Form")
Try
For i = 0 To form.Controls.Count - 1
control = form.Controls(i)
If TypeOf (control) Is MenuStrip Then
For j = 0 To control.items.count - 1
control.items(j).text = Get_Control_Name(form.Name, "MenuItem" & j)
Next
Else
controlname = Get_Control_Name(form.Name, control.Name)
control.Text = IIf(controlname Is Nothing, control.Text, controlname)
If TypeOf (control) Is GroupBox Then
For j = 0 To control.Controls.Count - 1
controlname = Get_Control_Name(form.Name, control.Controls(j).Name)
control.Controls(j).Text = IIf(controlname Is Nothing, control.Controls(j).Text, controlname)
If TypeOf (control.Controls(j)) Is Button Then
control.Controls(j).AutoSize = True
End If
Next
End If
If TypeOf (control) Is Button And UCase(control.Text) <> "X" Then
control.AutoSize = True
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
End Function
但在某些情况下,我想在容器内部控制控件。
我可以再循环一次control.Controls(j)
是一个组合框,但我想让这个功能处理任何类型的容器金字塔&#34;,如果你知道我的意思。也许我会有一个容器也有一个也有一个等等......或者是否有任何控制我可以用作一个组合框但它不算作一个容器,所以我可以看到它:
form.Controls
有什么建议吗?
提前致谢。
答案 0 :(得分:1)
您的代码无法提供所需内容的原因是您没有执行控件的递归搜索。请记住,Form.Controls
仅包含父控件(不是父控件最终包含的子控件;就像您引用GroupBox
所包含的控件的情况一样)。另外,我看到了各种不太正确的问题(你应该在你的文件顶部写Option Strict On
)这就是为什么这个答案打算为你提供一个更好的框架来处理(你只需填写)在您的代码的空白处):
Public Sub translate_form2(ByVal form As Form)
Try
For Each ctrl As Control In form.Controls
actionsCurrentControl(ctrl)
recursiveControls(ctrl)
Next
Catch ex As Exception
End Try
End Sub
'Accounting for all the child controls (if any)
Public Sub recursiveControls(parentControl As Control)
If (parentControl.HasChildren) Then
For Each ctrl As Control In parentControl.Controls
actionsCurrentControl(ctrl)
recursiveControls(ctrl)
Next
End If
End Sub
Public Sub actionsCurrentControl(curControl As Control)
If TypeOf curControl Is MenuStrip Then
Else
If TypeOf (curControl) Is GroupBox Then
End If
If TypeOf (curControl) Is Button And UCase(curControl.Text) <> "X" Then
End If
End If
End Sub
translate_form2
遍历代码中的所有父控件(但依赖于一组Subs
(你错误地使用了Function
而没有返回任何值,这是错的),使结构更具适应性;);它还调用recursiveControls
(它也为它分析的每个控件调用自己)来处理可能存在的任何子控件。我还包括actionsCurrentControl
,其中包含要为每个控件执行的所有操作(您必须使用您的代码填充它)。