我有一个用VS 2012(C#)编写的Winforms应用程序的问题。我把它贴在这里后,大量的研究和尝试,没有运气。
我有两个MDI子窗体和一个父窗体,我用它来在它们之间切换。第一次加载child 1后,MDI窗体看起来像是被向上推了,它的顶部被隐藏了,看不见;这个问题在第二次点击后解决。
这是child 1的源代码,与child 2的代码相同
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();
}
}
有人知道我做错了什么吗?或者我错过了什么?
1条答案
按热度按时间bmvo0sr51#
我在大量搜索和尝试人们推荐的各种东西后偶然发现了这篇文章,因为我在VS 2022中遇到了类似的问题。像LarsTech在注解中提到的那样,以编程方式或在窗体的属性中设置子窗体的
FormBorderStyle = Sizable
。值得注意的是,如果您想隐藏所有子窗体的控件框和顶部栏(最大化/最小化/关闭按钮沿着在左上方),请将
MenuStrip
控件停靠到应用程序的MDi父控件的顶部。然后,在MDi Parent的代码中将menuStrip1.Visible = false
设置在InitializeComponent()
函数的后面。如果要更改MenuStrip
控件的名称,请确保将menuStrip1
更改为MenuStrip
控件的实际名称。任何子窗体的控件框和顶部栏现在都将消失。有些帖子会说你需要设置子窗体的
WindowState = Maximized
,但这只是部分正确。如果你只有一个子窗体,那么你需要这个。但是,如果您有多个相继出现的子窗体(例如,我的应用程序根据不同的按钮按下关闭和打开不同的子窗体),那么您只需要设置一个具有此属性的子窗体(第一次出现在应用程序中的子窗体)。我希望这能帮助到任何看到这篇文章的人,就像它帮助了我一样!