Jür*_*ock 11 .net vb.net user-controls winforms
我有一个客户,它在单实例模式下作为Visual Basic项目,具有有线表示逻辑.
主窗体包含一个带有多个TabPages的TabControl.如果我单击TabPageA,表单前面会显示另一个表单,并调整大小以使其与TabPage具有相同的大小.
如果我单击TabPageB,则隐藏第一个表单并显示另一个表单.所以基本上对于用户来说,看起来你有一个带有不同TabPages的TabControl,但事实并非如此.
我尝试将Forms转换为UserControl并将它们放在TabPage中,但是,由于SingleInstance应用程序,这将需要大量的重构.我尝试了但最终因为许多运行时错误而放弃了,我不想在这方面付出更多努力.
我的想法是,在运行时,我可以将表单添加到TabPages并让它们像UserControls一样,这甚至可能吗?
Han*_*ant 36
您可以通过将其TopLevel属性设置为False将Form类重新转换为子控件.它本质上变成了一个带有一些未使用开销的UserControl.使它看起来类似于:
Public Class Form1
Public Sub New()
InitializeComponent()
Dim frm As New Form2
frm.TopLevel = False
frm.FormBorderStyle = Windows.Forms.FormBorderStyle.None
frm.Visible = True
frm.Dock = DockStyle.Fill
TabPage1.Controls.Add(frm)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
使用任何窗口都可以托管在任何其他窗口(Control是一个窗口,技术上)SetParent.
<System.Runtime.InteropServices.DllImport("user32.dll")>
Public Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
End Function
Run Code Online (Sandbox Code Playgroud)
宣布和
SetParent(FormToHost.Handle, ControlToHostForm.Handle)
Run Code Online (Sandbox Code Playgroud)
使用.这可能不太理想,但如果你不想再像这样做,那就没关系了.表单将最大化和最小化,并且不会显示在任务栏中,并将与其容器关闭.
| 归档时间: |
|
| 查看次数: |
6130 次 |
| 最近记录: |