c# - 父窗体的控件位于子窗体的前面(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()”时,无论出于何种原因,它都会在界面后面产生。
解决方案
您应该必须使用可能出现子窗体的面板。只需从Toolbox添加Panel并将其Dock属性更改为顶部并将所有菜单项放在该 Panel 中,然后添加新Panel即MainPanel以显示表单,然后使用以下代码在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();
推荐阅读
- c++ - 未出现在数组中的小写字母,按顺序排列
- php - Java 中的 DES-ECS 加密和 PHP 中的解密(解密返回 false)
- sql-server - 创建将查询 SQL 数据库并在自定义块上显示结果的搜索表单
- openlayers - openlayers,如何从矢量源中获取所有修改后的特征
- python - 如何将数据从 django 模板发送到我的反应组件
- c# - 解析 XML 时如何在下拉列表中创建 2 列?
- python - python“regex”和“re”模块中的“backrefrence conditions”不能按预期工作
- flutter - 如何设计具有固定时间和可变事件的颤动时间线小部件
- asp.net-core - 使用下拉菜单将多个搜索条件应用于剃须刀页面列表
- sql - Postgres - 为每个 ID 选择特定行