显示MDI子窗体时,子窗体在顶部被剪切
本文关键字:窗体 顶部 MDI 显示 | 更新日期: 2023-09-27 18:26:20
我有一个用VS2012(C#)编写的Winforms应用程序的问题。经过大量的研究和尝试,我把它发布在这里,但没有成功。
我有两个MDI子窗体和一个父窗体,用于在它们之间切换。第一次加载child1后,MDI表单看起来像是被向上推的,其顶部被隐藏,看不见;此问题在第二次单击后得到解决。
这是child1的来源,与child2 的代码相同
public partial class Child1 : Form
{
public Child1()
{
InitializeComponent();
panel1.Dock = DockStyle.Top;
StationFormUtils.SetPanelHeaderDefinitions(panel1);
}
private void Child_Load(object sender, EventArgs e)
{
//removes the child bar
this.MaximizeBox = false;
}
}
public static void SetPanelHeaderDefinitions(Panel panel)
{
panel.Size = new System.Drawing.Size(BaseClass.StationTableWidth, BaseClass.StationHeaderHeight);
panel.BackgroundImage = global::TestMdi.Properties.Resources.StationHeaderStrip;
panel.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Tile;
}
这是父级的源代码:
public partial class Form1 : Form
{
private Child1 ChildMainFrm1 = new Child1();
private Child2 ChildMainFrm2 = new Child2();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildMainFrm1.MdiParent = this;
ChildMainFrm1.WindowState = FormWindowState.Maximized;
ChildMainFrm1.Show();
}
private void button2_Click(object sender, EventArgs e)
{
ChildMainFrm2.MdiParent = this;
ChildMainFrm2.WindowState = FormWindowState.Maximized;
ChildMainFrm2.Show();
}
}
有人知道我做错了什么,或者我错过了什么吗?
我在大量搜索和尝试人们推荐的各种东西后偶然发现了这篇文章,因为我在VS2022中遇到了类似的问题。就像评论中提到的LarsTech一样,通过编程或在窗体的属性中设置子窗体的FormBorderStyle = Sizable
。
值得注意的是,如果要隐藏所有子窗体的控制框和顶部栏(左上角包含最大化/最小化/关闭按钮以及窗体的名称和图标),请将MenuStrip
控件固定到应用程序的MDi父窗体的顶部。然后,在InitializeComponent()
函数所在的MDi Parent代码后面设置menuStrip1.Visible = false
。如果您更改了MenuStrip
控件的实际名称,请确保使用该名称更改menuStrip1
。任何子窗体的控件框和顶部栏现在都将消失。
有些帖子会说您需要设置子窗体的WindowState = Maximized
,但这只是部分正确的。如果你只有一个子窗体,那么你需要这个。但是,如果您有多个子窗体一个接一个地出现(例如,我的应用程序根据不同的按钮关闭和打开不同的子窗体),那么您只需要有一个具有此属性集的子窗体(第一次出现在应用程序中的子形式)。
我希望这对任何看到这篇文章的人都有帮助,就像它对我有帮助一样!