将主形式最小化时,将表格设置为中心谱



我有一个我想显示的表格,以此为中心,使用类似的形式。

  Form f = new Form();     
  f.StartPosition = FormStartPosition.CenterParent;
  f.ShowDialog(this);

如果在应用程序处于最小化状态时触发此代码,并且当应用程序恢复时,我的表单显示在屏幕右上方,而不是以其父为中心。

,则会发生问题。

有人知道如何解决此问题吗?

标准的Windows消息框对话框的行为正确,当应用程序从最小化状态恢复时,对话框处于正确的位置。

我的建议是在最小化
时"缓存"父级的位置(覆盖WndProc()方法将使在能力>最小化(。

private Point CachedLocation;
protected override void WndProc(ref Message m)
{
    if (m.Msg == 0x0112) // WM_SYSCOMMAND
    {
        if (m.WParam == new IntPtr(0xF020)) // SC_MINIMIZE
        {
            // save the form location beofore it is minimized
               CachedLocation= this.Location;
        }
        m.Result = new IntPtr(0);
    }
    base.WndProc(ref m);
}

现在,如果在调用子表格时将父表格最小化,请使用缓存的位置点(通过检查FormWindowState枚举(:

private void button1_Click(object sender, EventArgs e)
{         
    Form f = new Form();
    if (this.WindowState == FormWindowState.Minimized)
    {
        f.Top = (CachedLocation.Y + (this.Height / 2)) - f.Height / 2;
        f.Left = (CachedLocation.X + (this.Width / 2)) - f.Width / 2;
        f.StartPosition = FormStartPosition.Manual;
        f.ShowDialog();
    }
    else
    {
        f.StartPosition = FormStartPosition.CenterParent;
        f.ShowDialog();
    }
}

最新更新