首页 > 解决方案 > 父窗体的控件位于子窗体的前面(Winforms)

问题描述

我有一个带有水平下拉框的程序,有 4 个选项可供选择,当我单击以下按钮之一时,将出现“子按钮”:

这是界面:

这是界面

我想要做的是,当我单击下拉菜单选项之一时,我希望在黑色区域产生一个子窗体,使用以下命令:

private Form activeForm = null;

    private void openChildForm(Form childForm)
    {
        if (activeForm != null)
            activeForm.Close();
        activeForm = childForm;
        childForm.TopLevel = false;
        childForm.FormBorderStyle = FormBorderStyle.None;
        childForm.Dock = DockStyle.Fill;
        MainInterfacePanel.Controls.Add(childForm);
        MainInterfacePanel.Tag = childForm;
        childForm.BringToFront();
        childForm.Show();
    }

但是,当我这样做时,子窗体确实正常显示,但它覆盖了下拉菜单,阻止我选择其他功能:

这是它的样子(子表单仍然是空白表单,因此是白度):

这是它的样子(子窗体仍然是一个空白窗体,因此是白度)

我尝试通过使用item.bringToFront()按钮来解决这个问题,但它似乎不起作用。

基本上,我希望父窗体留在子窗体后面,而按钮位于子窗体的前面,就像重叠一样。有没有办法这样做?

此外,当我删除“childForm.BringToFront()”时,无论出于何种原因,它都会在界面后面产生。

标签: c#winformsparent-child

解决方案


您应该必须使用可能出现子窗体的面板。只需从Toolbox添加Panel并将其Dock属性更改为顶部并将所有菜单项放在该 Panel 中,然后添加新PanelMainPanel以显示表单,然后使用以下代码在Panel内显示表单

    SubForm objForm=new SubForm();
    objForm.TopLevel = false;
    MainPanel.Controls.Add(objForm);
    objForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    objForm.Dock = DockStyle.Fill;
    objForm.Show();

推荐阅读