显示最小化的动态创建的表单

时间:2018-10-05 16:03:21

标签: vb.net winforms

我有一个程序,允许您打开应用程序本身的其他Forms
这些Forms中的每一个都可以通过PictureBox打开,并且具有自定义标题栏,它们具有一个自定义按钮,可让您最小化它们。

您可以在每个窗口中打开多个窗口。

在最小化这些Windows之一时,会将UserControl添加到具有自定义背景图片的FlowLayoutPanel,并将Label添加到最小化Window的文本中。

如果还有更多打开的窗口,也许标题相同,如何显示特定的窗口?

2 个答案:

答案 0 :(得分:1)

包含最小化窗口文本的标签标签可以包含对表单的引用。 由于标签是根据表单上的代码创建的,因此需要最小化...

NewLable.Tag = Me

然后,当您想重新显示表单时

Private Sub SomeLabel_Click(sender as object, e as EventArgs) Handles SomeLabel.Click 
    Dim frm as Form
    Dim lbl as Lable = CType(sender, Label)
    frm = CType(lbl.Tag, Form)
    frm.Show
End Sub

未经测试-只是一个主意

答案 1 :(得分:1)

这是一个简化的示例

使用三个表单(Form1,Form2,Form3)制作一个新项目,并创建启动对象Form3。在Form3上,添加FlowLayoutPanel1,然后添加Button1和Button2。

为此在Form3中进行编码。其他形式可以为空白。

Public Class Form3

    Private forms As New List(Of Form)()

    Private Sub addNewForm(form As Form)
        forms.Add(form)
        Dim b As New Button With {.Text = form.Text, .Visible = False}
        AddHandler b.Click, Sub() form.WindowState = FormWindowState.Normal
        AddHandler form.Resize, Sub() b.Visible = (form.WindowState = FormWindowState.Minimized)
        Me.FlowLayoutPanel1.Controls.Add(b)
        form.Show()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        addNewForm(New Form1)
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        addNewForm(New Form2)
    End Sub

End Class

我认为关键是为添加到FlowLayoutPanel的每个按钮(对应于每个创建的表单)添加一个处理程序。这样,您无需尝试跟踪表单,因为按钮处理程序是在表单仍处于上下文中时创建的。

您可以将按钮更改为UserControl或其他任何按钮,但概念将相同。