winforms 当显示MDI子窗体时,子窗体在顶部被截断

ubof19bj  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(106)

我有一个用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();
    }
}

有人知道我做错了什么吗?或者我错过了什么?

bmvo0sr5

bmvo0sr51#

我在大量搜索和尝试人们推荐的各种东西后偶然发现了这篇文章,因为我在VS 2022中遇到了类似的问题。像LarsTech在注解中提到的那样,以编程方式或在窗体的属性中设置子窗体的FormBorderStyle = Sizable
值得注意的是,如果您想隐藏所有子窗体的控件框和顶部栏(最大化/最小化/关闭按钮沿着在左上方),请将MenuStrip控件停靠到应用程序的MDi父控件的顶部。然后,在MDi Parent的代码中将menuStrip1.Visible = false设置在InitializeComponent()函数的后面。如果要更改MenuStrip控件的名称,请确保将menuStrip1更改为MenuStrip控件的实际名称。任何子窗体的控件框和顶部栏现在都将消失。
有些帖子会说你需要设置子窗体的WindowState = Maximized,但这只是部分正确。如果你只有一个子窗体,那么你需要这个。但是,如果您有多个相继出现的子窗体(例如,我的应用程序根据不同的按钮按下关闭和打开不同的子窗体),那么您只需要设置一个具有此属性的子窗体(第一次出现在应用程序中的子窗体)。
我希望这能帮助到任何看到这篇文章的人,就像它帮助了我一样!

相关问题