小编Sha*_*hah的帖子

在MDI应用程序中的父窗体中心打开模态窗口

我正在使用Winform应用程序,并希望在父窗体的中心打开模态窗体.在Winform应用程序中有:

  1. MDI表格(作为启动表格打开并充当所有人的容器)
  2. 单击MDI表单的菜单项之一 - 打开MDI子表单
  3. 单击MDI上的按钮之一在步骤2中打开的子项 - 打开一个模式窗体 - 我们需要在MDI子窗体的中心打开(在步骤2中打开)

因此,对于在中心打开模态形式,我所做的第一个明显的解决方案是

TestModalForm obj = new TestModalForm()
obj.StartPosition = FormStartPosition.CenterParent;
obj.showdialog(this);
Run Code Online (Sandbox Code Playgroud)

但上述解决方案不起作用,因为模态形式始终将MDI表格视为其父级.所以我为第二个解决方案做准备:我在Form Load of Modal窗口中编写方法将它放在中心,如下所示:

        private void MakeWinInCenter()
        {
            if (this.Owner != null)
            {
                Form objParent = null;
                int TopbarHeight = 0;
                if (this.Owner.IsMdiContainer && this.Owner.ActiveMdiChild != null)
                {
                    objParent = this.Owner.ActiveMdiChild;
                    TopbarHeight = GetTopbarHeight(this.Owner);
                }
                else
                    objParent = this.Owner;

                Point p = new Point((objParent.Width - this.Width) / 2, (objParent.Height - this.Height) / 2);
                p.X += objParent.Location.X;
                p.Y += TopbarHeight + …
Run Code Online (Sandbox Code Playgroud)

c# mdi winforms

6
推荐指数
1
解决办法
1万
查看次数

移动表单时如何停止 ResizeEnd 事件?

我在表单ResizeEnd事件中编写了某些代码。现在的问题是,当通过单击并拖动标题栏来移动表单时,ResizeEnd即使表单大小未更改,也会触发事件并执行代码。

我浏览了Resizeend事件的 MSDN 文档,它说当表单移动时事件将触发(不明白为什么在大小未更改时会发生这种情况)。

为了解决问题,我设置了 if 条件来检查大小是否发生更改,如下所示,以停止在表单移动时执行代码:

int Prv_Height; int Prv_Width;
private void TemplateGrid_ResizeEnd(object sender, EventArgs e)
{
    if (this.Size.Width != Prv_Width || this.Size.Height != Prv_Height)
    {
        Prv_Width = this.Size.Width;
        Prv_Height = this.Size.Height;
        //Other code here when form resize ends...
    }
}
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以ResizeEnd在表单移动时阻止事件触发呢?或者有其他更好的方法来解决问题?

winforms

6
推荐指数
1
解决办法
1251
查看次数

标签 统计

winforms ×2

c# ×1

mdi ×1