【问题标题】:MDI form doesn't show even though it shouldMDI 表单不显示,即使它应该显示
【发布时间】:2020-09-07 09:00:04
【问题描述】:

当我打开一个文本文件时,我想在父窗体中打开一个 Mdi 子窗体。问题是,它根本不显示。在你问之前,是的,它的主窗体绝对设置为 MDI 容器。请忽略子窗体除了假定的显示之外什么都不做的事实。

 private void OpenToolStripButton_Click(object sender, EventArgs e)
        {
            var dialog = new OpenFileDialog() { Filter = "Statement files|* .STA" };
            var result = dialog.ShowDialog();

            if (result == System.Windows.Forms.DialogResult.OK)
            {
                StatementForm statementForm = new StatementForm();
                statementForm.Text = dialog.FileName;
                statementForm.MdiParent = _mainForm;
                statementForm.StartPosition = FormStartPosition.CenterParent;
                statementForm.Dock = DockStyle.Fill;
                statementForm.Show();
            }
        }

【问题讨论】:

  • 我的最佳猜测:_mainFormnull
  • 问题是,如果我删除“statementForm.MdiParent = _mainForm;”每次我打开一个 txt 文件时,它都会抽出“子窗体”(我知道它们在那种情况下不是子窗体)。我认为这意味着 _mainform 不为空。那以及我没有收到关于它为空的警告的事实
  • 如何启动_mainForm变量?
  • 私有 MainForm _mainForm = new MainForm() { IsMdiContainer = true };
  • 看来,您正在创建MainForm 的新实例,而不是使用现有实例。试试看:statementForm.MdiParent = this //referes to a form which calls this method

标签: c# .net winforms mdi


【解决方案1】:

尝试在程序类中声明MainForm如下:

static class Program
{
    internal static MainForm _mainForm;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        _mainForm = new MainForm();
        Application.Run(_mainForm);
    }
}

然后您可以将其分配为父表单:

statementForm.MdiParent = Program._mainForm;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多