VB项目中每个表单的自定义控制箱事件,都放入模块中



在我正在从事的项目的每种形式中,有一些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

最新更新