在我正在从事的项目的每种形式中,有一些FlowLayoutPanel
s包含三个Label
s。这些 Label
s用作最小化,最大化和 close close 表单>表单按钮。换句话说
在每种形式中都有一个Private Sub
,如下一个,通过自定义按钮事件称为:
Private Sub AllForms_CustomControlBox_Controls_Click(sender As Object, e As EventArgs)
Dim _Label = DirectCast(sender, Control)
If _Label.Name = "Custom_MinimizeForm_Label" Then
Me.WindowState = FormWindowState.Minimized
ElseIf _Label.Name = "Custom_MaximizeForm_Label" Then
If Me.WindowState = FormWindowState.Normal Then
Me.WindowState = FormWindowState.Maximized
ElseIf Me.WindowState = FormWindowState.Maximized Then
Me.WindowState = FormWindowState.Normal
End If
ElseIf _Label.Name = "Custom_CloseForm_Label" Then
Me.Close()
End If
End Sub
为了避免以各种形式重复这一部分,我认为最好将其放入模块中。我试图将代码的这一部分转换为应该在模块中,但没有成功。当我单击三个Label
s中的任何一个时,我会收到此消息:
system.invalidoperationException:'收集被修改;枚举操作可能不会执行。'
Public Sub AllForms_CustomControlBox_Controls_Click(sender As Object, e As EventArgs)
For Each _Form As Form In My.Application.OpenForms.OfType(Of Form)()
For Each _FlowLayoutPanel As Control In _Form.Controls.OfType(Of FlowLayoutPanel)()
For Each _Label As Control In _FlowLayoutPanel.Controls.OfType(Of Label)()
If _Label.Name = "Custom_MinimizeForm_Label" Then
_Form.WindowState = FormWindowState.Minimized
ElseIf _Label.Name = "Custom_MaximizeForm_Label" Then
If _Form.WindowState = FormWindowState.Normal Then
_Form.WindowState = FormWindowState.Maximized
ElseIf _Form.WindowState = FormWindowState.Maximized Then
_Form.WindowState = FormWindowState.Normal
End If
ElseIf _Label.Name = "Custom_CloseForm_Label" Then
_Form.Close()
End If
Next
Next
Next
End Sub
您以每种形式的原始代码很好。您不需要添加到它的循环和其他修改。
您需要做的就是用_Label.FindForm()
替换Me
,当然可以像您一样将其替换为Public
:
Public Sub AllForms_CustomControlBox_Controls_Click(sender As Object, e As EventArgs)
Dim _Label = DirectCast(sender, Control)
Dim _Form = _Label.FindForm()
If _Label.Name = "Custom_MinimizeForm_Label" Then
_Form.WindowState = FormWindowState.Minimized
ElseIf _Label.Name = "Custom_MaximizeForm_Label" Then
If _Form.WindowState = FormWindowState.Normal Then
_Form.WindowState = FormWindowState.Maximized
ElseIf Me.WindowState = FormWindowState.Maximized Then
_Form.WindowState = FormWindowState.Normal
End If
ElseIf _Label.Name = "Custom_CloseForm_Label" Then
_Form.Close()
End If
End Sub