如何在 Windows 表单应用程序中正确地将表单停靠到 MDI?
How to properly dock to the right a form to a MDI in a Windows Form application?
我正在向 MDI 添加侧边栏表单(不是子表单)并将其停靠在右侧。
侧边栏的顶部似乎与工具栏重叠。手动调整大小时(通过拖动),边栏 "magically" 看起来不错。
调整大小前:
调整大小后:
public partial class MDI : Form
{
private void InitGenealogicalTree()
{
var form = new GenealogicalTreeForm();
form.TopLevel = false;
form.WindowState = FormWindowState.Normal;
form.Dock = DockStyle.Right;
this.Controls.Add(form);
}
}
注意:ToolStrip 是在设计模式下添加的。
如何正确添加边栏表单而不使其与工具栏重叠?
只需将面板置于 desigenermode 中,您希望在其中放置侧面板并在面板中显示侧面板。
以下代码可让您在面板中显示侧边栏表单:
var form = new GenealogicalTreeForm();
form.TopLevel = false;
panel.Controls.Add(form);
form.Dock = DockStyle.Fill;
this.Controls.Add(form);
form.Show();
边栏 windows 不能移动,不能调整大小,不能最大化,所以:
- 将
FormBorderStyle
设置为 FixedToolWindow
。
覆盖侧边栏 WndProc
window WndProc
以防止移动并防止最大化:
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MOVE = 0xf010;
const int SC_MAXIMIZE = 0xf030;
if (m.Msg == WM_SYSCOMMAND)
{
int command = m.WParam.ToInt32() & 0xfff0;
if (command == SC_MOVE || command == SC_MAXIMIZE)
return;
}
base.WndProc(ref m);
}
另外,添加侧边栏时,将其置于前面。这意味着首先应该停靠工具栏,然后侧边栏 windows 将停靠在剩余区域:
this.Controls.Add(sideBar);
sideBar.BringToFront();
我正在向 MDI 添加侧边栏表单(不是子表单)并将其停靠在右侧。 侧边栏的顶部似乎与工具栏重叠。手动调整大小时(通过拖动),边栏 "magically" 看起来不错。
调整大小前:
调整大小后:
public partial class MDI : Form
{
private void InitGenealogicalTree()
{
var form = new GenealogicalTreeForm();
form.TopLevel = false;
form.WindowState = FormWindowState.Normal;
form.Dock = DockStyle.Right;
this.Controls.Add(form);
}
}
注意:ToolStrip 是在设计模式下添加的。
如何正确添加边栏表单而不使其与工具栏重叠?
只需将面板置于 desigenermode 中,您希望在其中放置侧面板并在面板中显示侧面板。
以下代码可让您在面板中显示侧边栏表单:
var form = new GenealogicalTreeForm();
form.TopLevel = false;
panel.Controls.Add(form);
form.Dock = DockStyle.Fill;
this.Controls.Add(form);
form.Show();
边栏 windows 不能移动,不能调整大小,不能最大化,所以:
- 将
FormBorderStyle
设置为FixedToolWindow
。 覆盖侧边栏
WndProc
windowWndProc
以防止移动并防止最大化:protected override void WndProc(ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_MOVE = 0xf010; const int SC_MAXIMIZE = 0xf030; if (m.Msg == WM_SYSCOMMAND) { int command = m.WParam.ToInt32() & 0xfff0; if (command == SC_MOVE || command == SC_MAXIMIZE) return; } base.WndProc(ref m); }
另外,添加侧边栏时,将其置于前面。这意味着首先应该停靠工具栏,然后侧边栏 windows 将停靠在剩余区域:
this.Controls.Add(sideBar); sideBar.BringToFront();