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



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

您可以打开每个窗口的多个窗口。

最小化其中一个窗口时,UserControl将添加到具有自定义背景图像和包含最小化窗口文本的LabelFlowLayoutPanel中。

如果有更多打开的窗口,可能具有相同的标题,如何显示特定的窗口?

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

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

未经测试 - 只是一个想法

这是一个简化的示例

创建一个具有三种窗体(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或其他任何内容,但概念将是相同的。

最新更新