MDI winforms的ShowDialog属性

时间:2015-04-16 14:16:19

标签: c# winforms mdichild

问题:

如何以ShowDialog()格式显示MDI子窗体?

我尝试过的事情:

private void Add()
        {

            ModuleAddPopUp map = new ModuleAddPopUp();
            map.StartPosition = FormStartPosition.CenterScreen;
            map.ShowDialog();          
        }

执行上述操作后,表单将中心屏幕显示为弹出窗口,但是当MDI未最大化时,我可以将表单拖到MDI外部。

private void Add()
        {
            ModuleAddPopUp map = new ModuleAddPopUp();
            FormFunctions.OpenMdiDataForm(App.Program.GetMainMdiParent(), map);

        }

执行上述操作时,表单显示中心屏幕,不允许将表单拖到MDI外部,但作为map.Show(),而不是map.ShowDialog();

1 个答案:

答案 0 :(得分:0)

将此代码添加到ModuleAddPopup班级:

protected override void WndProc(ref Message message)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MOVE = 0xF010;
    //SC_SIZE = 0XF000 if you also want to prevent them from resizing the form.
    //Add it to the 'if' condition.
    switch (message.Msg)
    {
        case WM_SYSCOMMAND:
            int command = message.WParam.ToInt32() & 0xfff0;
            if (command == SC_MOVE)
                return;
            break;
    }

    base.WndProc(ref message);
}

这是用C#代码包装的本机代码,如here中所示。 但是,这会阻止用户在任何地方移动对话框。

然后,在您的主要表格中:

private void Add()
{
    ModuleAddPopUp map = new ModuleAddPopUp();
    map.StartPosition = FormStartPosition.CenterParent;
    map.ShowDialog();          
}