C# 表单用户控制面板重叠

C# 表单用户控制面板重叠,c#,winforms,C#,Winforms,我有两种形式——形式“主要”和形式“警报” 我已经从“警报”改为“用户控制” 下面是“main”形式的代码 alert=newalertform(); alert.TopLevel=false; alert.Visible=true; this.pnlData.Controls.Add(警报); alert.cancelled+=新事件处理程序(按钮取消单击); alert.Show(); pnlData是“主”窗体内的面板 当我尝试运行时,userControl像这样重叠 如何解决这个问题

我有两种形式——形式“主要”和形式“警报”

我已经从“警报”改为“用户控制”

下面是“main”形式的代码

alert=newalertform();
alert.TopLevel=false;
alert.Visible=true;
this.pnlData.Controls.Add(警报);
alert.cancelled+=新事件处理程序(按钮取消单击);
alert.Show();
pnlData是“主”窗体内的面板

当我尝试运行时,userControl像这样重叠

如何解决这个问题?
如何在pnlData中将userControl置于标签和文本框前面?

我可以重现您的问题。这是摆脱它的代码:

public Form1() // constructor
{
    InitializeComponent();

    Form f = new Form2();
    f.TopLevel = false;
    panel1.Controls.Add(f);
    f.BringToFront();
    // Edit: if you want to change Top - do similar thing to Y
    f.Location = new Point((int)(panel1.Size.Width / 2 - f.Size.Width / 2), 0);
    f.Show();

}

完美工作-表单正在面板内部移动

注意,您的“对话框”只是作为控件(而不是对话框/窗口!)添加到pnlData控件中。阅读中有关如何正确操作的备注和示例部分。这是一个简单的Z顺序问题。添加
alert.BringToFont()设置TopLevel=false在这里不是一个好主意。我尝试删除
TopLevel
并添加
alert.BringToFont()但错误
无法将顶级控件添加到控件。
@hanspassant请勿同时执行这两项操作。如果不指定TopLevel,则不要调用Controls.Add()您的解决方法很简单:
control.BringToFront
。确保您的警报实际上是一个
控件,而不是表单要居中于何处?表单2,如何将表单2定位在屏幕的中心
f.Location=新点((int)(panel1.Size.Width/2-f.Size.Width/2),(panel1.Size.Height/2-f.Size.Height/2))现在一切正常,非常感谢@T.S
public Form1() // constructor
{
    InitializeComponent();

    Form f = new Form2();
    f.TopLevel = false;
    panel1.Controls.Add(f);
    f.BringToFront();
    // Edit: if you want to change Top - do similar thing to Y
    f.Location = new Point((int)(panel1.Size.Width / 2 - f.Size.Width / 2), 0);
    f.Show();

}