Vb.net MDI子窗体从未显示
我正在制作一个VOS,其中桌面是MDI父窗体。但是,一旦我显示任何子窗口,它们就会出现,加载所有资源,然后再次隐藏。他们也不会回来 显示应用程序的代码:Vb.net MDI子窗体从未显示,vb.net,mdi,mdichild,mdiparent,Vb.net,Mdi,Mdichild,Mdiparent,我正在制作一个VOS,其中桌面是MDI父窗体。但是,一旦我显示任何子窗口,它们就会出现,加载所有资源,然后再次隐藏。他们也不会回来 显示应用程序的代码: Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click, Label1.Click, TestToolStripMenuItem.Click showapp(Maininternet) End Su
Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click, Label1.Click, TestToolStripMenuItem.Click
showapp(Maininternet)
End Sub
''' <summary>
''' Add's an app to the Galaxy OS MDI child tree and shows it.
''' </summary>
''' <param name="app">Name of the app.</param>
''' <remarks></remarks>
Sub showapp(app As Form)
AddNewForm(app)
app.Show()
End Sub
Private Sub PictureBox1\u Click(发送方作为对象,e作为事件参数)处理PictureBox1。Click,Label1。Click,TestToolStripMenuItem。Click
showapp(主互联网)
端接头
'''
''将应用程序添加到Galaxy OS MDI子树并显示它。
'''
''应用程序的名称。
'''
子showapp(应用程序作为表单)
AddNewForm(应用程序)
app.Show()
端接头
在其中一个模块中:
''' <summary>
''' Adds a form to the MDI application
''' And links it with a TaskBarItem
''' </summary>
''' <param name="frm">The form to use</param>
''' <remarks></remarks>
Private Sub AddNewForm(ByVal frm As Form)
frm.MdiParent = GalaxyOS.Core.GUI.Desktop
Dim img As Image = CType(New ImageConverter().ConvertFrom(frm.Icon), Image)
Dim tbItem As New TaskBarItem(frm.Text, img, frm)
tbItem.ImageScaling = ToolStripItemImageScaling.SizeToFit
TaskBar.Items.Add(tbItem)
frm.Show()
End Sub
“”
''将表单添加到MDI应用程序
''并将其与TaskBarItem链接
'''
''要使用的表单
'''
私有子AddNewForm(ByVal frm作为表单)
frm.mdipalent=GalaxyOS.Core.GUI.Desktop
Dim img As Image=CType(新图像转换器().CONVERTFORM(frm.Icon),图像)
尺寸tbItem作为新TaskBarItem(frm.Text、img、frm)
tbItem.ImageScaling=ToolStripItemImageScaling.SizeToFit
任务栏.项目.添加(tbItem)
frm.Show()
端接头
由于它是一个操作系统,因此有一个menustrip充当任务栏,TaskBarItem是一个menustrip项目,显示应用程序的图标、名称以及关闭和恢复应用程序的选项。代码:
Namespace Core.GUI.Desktop.Taskbar
''' <summary>
''' The TaskBarItem class is a item on the TaskBar that can close/restore a application
''' It represents the form's icon and text on the visual side
''' </summary>
''' <remarks></remarks>
Public Class TaskBarItem
Inherits ToolStripMenuItem
Private WithEvents CloseItem As New ToolStripMenuItem("Close")
Private WithEvents RestoreItem As New ToolStripMenuItem("Restore")
Friend WithEvents Control1 As System.Windows.Forms.Control
Private _form As Form
''' <summary>
''' Creates a new instance of the TaskBarItem class
''' </summary>
''' <param name="text">The text used on the item</param>
''' <param name="img">The image used on the item</param>
''' <param name="frm">The form that is linked to it</param>
''' <remarks></remarks>
Public Sub New(ByVal text As String, ByVal img As Image, ByVal frm As Form)
MyBase.New(text, img)
CloseItem.BackColor = color.black
CloseItem.ForeColor = color.deepskyblue
RestoreItem.BackColor = color.black
RestoreItem.ForeColor = color.deepskyblue
BackColor = color.black
ForeColor = color.deepskyblue
_form = frm
AddHandler CloseItem.Click, AddressOf Close_Click
AddHandler RestoreItem.Click, AddressOf Restore_Click
AddHandler frm.FormClosing, AddressOf Form_Closed
Me.DropDownItems.Add(CloseItem)
Me.DropDownItems.Add(RestoreItem)
frm.Show()
End Sub
'' A event to remove the item when the form has been closed by the close button
'' or a internal Form.Close call
Private Sub Close_Click(ByVal sender As Object, ByVal e As EventArgs)
Me.Parent.Items.Remove(Me)
If (Not IsNothing(_form)) Then
_form.Close()
End If
End Sub
'' A event to restore the form's previous state
Private Sub Restore_Click(ByVal sender As Object, ByVal e As EventArgs)
If (_form.WindowState = FormWindowState.Minimized) Then
_form.WindowState = FormWindowState.Normal
_form.Visible = True
End If
End Sub
'' A event to close the form using the TaskBarItem
Private Sub Form_Closed(sender As Object, e As FormClosingEventArgs)
For Each tsmi As ToolStripMenuItem In GalaxyOs.Core.GUI.Desktop.Desktop.TaskBar.Items
If (tsmi.Text = _form.Text) Then
Me.Parent.Items.Remove(tsmi)
Exit For
End If
Next
End Sub
End Class
End Namespace
Namespace Core.GUI.Desktop.Taskbar
'''
''TaskBarItem类是任务栏上可以关闭/恢复应用程序的项目
''它代表窗体的图标和视觉侧的文本
'''
'''
公共类TaskBarItem
继承ToolStripMenuItem
Private WithEvents CloseItem作为新工具条带菜单项(“关闭”)
Private with Events RestoreItem作为新的ToolStripMenuItem(“还原”)
Friend WithEvents Control1作为System.Windows.Forms.Control
私有形式作为形式
'''
''创建TaskBarItem类的新实例
'''
''项目上使用的文本
''项目上使用的图像
“链接到它的窗体”
'''
Public Sub New(ByVal文本作为字符串,ByVal img作为图像,ByVal frm作为表单)
MyBase.New(文本,img)
CloseItem.BackColor=color.black
CloseItem.ForeColor=color.deepskyblue
RestoreItem.BackColor=color.black
RestoreItem.ForeColor=color.deepskyblue
BackColor=color.black
前景色=颜色。深天蓝
_形式=frm
AddHandler CloseItem.单击,关闭地址\u单击
AddHandler RestoreItem.单击,还原地址\u单击
AddHandler frm.FormClosing,Form_的地址已关闭
Me.DropDownItems.Add(CloseItem)
Me.DropDownItems.Add(RestoreItem)
frm.Show()
端接头
“”是一个事件,用于在通过关闭按钮关闭窗体时删除该项
“”或内部窗体。关闭调用
私有子关闭\单击(ByVal发送方作为对象,ByVal e作为事件参数)
Me.Parent.Items.Remove(Me)
如果(不是什么(_形式))那么
_表.结束()
如果结束
端接头
“”是用于还原窗体以前状态的事件
私有子还原\u单击(ByVal发送方作为对象,ByVal e作为事件参数)
如果(_form.WindowState=FormWindowState.Minimized),则
_form.WindowState=FormWindowState.Normal
_form.Visible=True
如果结束
端接头
“”使用TaskBarItem关闭窗体的事件
私有子表单_关闭(发送方作为对象,e作为FormClosingEventArgs)
对于GalaxyOs.Core.GUI.Desktop.Desktop.TaskBar.Items中的每个tsmi作为ToolStripMenuItem
如果(tsmi.Text=_form.Text),则
Me.Parent.Items.Remove(tsmi)
退出
如果结束
下一个
端接头
末级
结束命名空间
我是一个彻头彻尾的傻瓜,我真的被困在这个
非常感谢您的帮助,
哈姆扎·阿里我把问题解决了!问题是,我在MDI父窗体上有一个flowlayoutpanel,它位于前台,让MDI子窗体显示在后台。FlowLayoutPanel是否有任何方式不妨碍MDI子级 谢谢,
Hamza Ali不清楚您在做什么:
frm.MdiParent=Me
如果该行在模块中,则无法编译,因为Me不会引用表单。在设置MdiParent属性之前,我不会尝试显示表单。哎呀,我是想把桌面放在那里……我现在就更改它。好吧,这很清楚。什么是GalaxyOS.Core.GUI.Desktop?这看起来不像是引用MDI父窗体的实例。哦,是的,它在设置MDI父窗体属性后显示窗体。GalaxyOS.Core.GUI.Desktop
是桌面窗体,它只是被放在名称空间中以便于导航。这个项目有超过125个表单,因此将所有内容放在一个名称空间中可以更容易地导航到正确的表单,同时要记住,有多个表单具有相同的名称。对不起,我之前没有解释。