加载mdi winform c#.net时出现奇怪的行为

时间:2011-09-22 12:12:24

标签: c# .net winforms

我在c#MDI WinForms应用程序中遇到了一个奇怪的行为。当我与任何其他表单一起打开特定表单时,此特定表单会锁定。不知何故,它将两种形式的ControlBox分组为一个,如下所示:

enter image description here

由于表格已经停止响应,它不能关闭并停止绘画:

enter image description here

奇怪的是,任何其他形式的组合都可以正常工作。表单相互加载,应用程序不会冻结。 但我无法弄清楚这种形式与其他形式相比有何不同。所有设置都相同。 这是主MDIform中用于启动新子窗体的代码,它是从ToolStrip Button.Click事件调用的:

    private void OpenForm(object sender)
    {
        if (sender == null) return;            
        ToolStripMenuItem itemSender = (ToolStripMenuItem)sender;

        try
        { 
            WinForm mapping = (WinForm)itemSender.Tag;

            if (!FormList.ContainsKey(mapping.FormName))
            {
                Type frmType = Type.GetType(string.Format("OrderAssist.Forms.{0}", mapping.FormName));
                if (frmType != null)
                {
                    Form newForm = (Form)Activator.CreateInstance(frmType);
                    if (!newForm.IsDisposed)
                    {
                        newForm.Name = mapping.FormName;
                        newForm.Tag = itemSender;
                        newForm.MdiParent = this;
                        newForm.Show();
                        newForm.WindowState = System.Windows.Forms.FormWindowState.Maximized;
                        newForm.FormClosing += new FormClosingEventHandler(newForm_FormClosing);
                        FormList.Add(newForm.Name, newForm);
                        itemSender.Checked = true;
                        newForm.Activate();                         
                    }
                }
                else
                    itemSender.Enabled = false;
            }
            else
                FormList[mapping.FormName].Activate();
        }
        catch (Exception e)
        {
            Exceptions.ProgramException(e, Settings.User.ID, "Exception occured while opening a form.");
            if (itemSender != null)
                itemSender.Enabled = false;
        }
    }

为了使这个问题更加奇怪,如果我填充这个锁定数据并单击内部控件的表单,在打开另一个表单之前,不会发生错误。

我不知道下一步该尝试什么。

1 个答案:

答案 0 :(得分:0)

newForm.WindowState = System.Windows.Forms.FormWindowState.Maximized;

为您的所有控件调用上面的行,这会导致控件框组合在一起。

对于冻结的表单,您需要发布导致表单冻结的子表单的代码。然后我可以进一步帮助你。