【问题标题】:Form userControl panel overlapping表单用户控制面板重叠
【发布时间】:2013-11-21 12:03:05
【问题描述】:

我有两种表格 - 表格“main”和表格“alert”。

我已将“警报”表单更改为 userControl,

这是“main”形式的代码。

alert = new AlertForm();
alert.TopLevel = false;
alert.Visible = true;
this.pnlData.Controls.Add(alert); 
alert.Canceled += new EventHandler<EventArgs>(buttonCancel_Click);
alert.Show();

pnlData 是“main”表单内的一个面板

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

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

【问题讨论】:

  • 请注意,您的“对话框”只是作为控件(不是对话框/窗口!)添加到您的 pnlData 控件中。阅读Form documentation 中的备注和示例部分,了解如何正确操作。
  • 这是一个简单的 Z 顺序问题。添加alert.BringToFont(); 设置TopLevel = false 在这里不是一个好主意。
  • 我尝试删除TopLevel并添加alert.BringToFont();但错误Top-level control cannot be added to a control.@HansPassant
  • 不要两者都做。如果您不分配 TopLevel 则不要调用 Controls.Add()
  • 您的解决方法很简单:control.BringToFront。确保您的警报实际上是 control,而不是表单

标签: c# winforms


【解决方案1】:

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

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();

}

完美运行 - 表单在面板内移动

【讨论】:

  • 你想居中什么?
  • form2,如何定位form 2的屏幕中心
  • f.Location = new Point((int)(panel1.Size.Width / 2 - f.Size.Width / 2), (panel1.Size.Height / 2 - f.Size.Height / 2)); 现在一切正常,非常感谢@T.S
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 2010-10-16
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2020-06-30
  • 2010-09-18
相关资源
最近更新 更多