-1

我有这些课程:

internal partial class FBase : Form
{
    public FBase() { InitializeComponent(); }

    public FBase(bool owner) : this()
    {
        if (!owner) { this.Opacity = 0; Load += (s, e) => Close(); }
    }
}

internal partial class Form1 : FBase
{
    public Form1(bool owner) : base(owner) { InitializeComponent(); }
}

此代码有效(不显示 Form1):

Form1 f = new Form1(false);
if(f != null) { f.MdiParent = parent; f.Show(); }

但这不起作用(显示 Form1):

OpenSingleMdiChild(() => new Form1(false));

这是 OpenSingleMdiChild 的实现:

public static void OpenSingleMdiChild<T>(this Form parent, Func<T> factory) where T : Form
{
    T f = null;

    foreach (Form c in parent.MdiChildren) if (c.GetType() == typeof(T)) {  f = c; break; }

    if (f == null) { f = factory(); f.MdiParent = parent; }

    f.Show(); f.Select();
}
4

1 回答 1

1

如果我理解您的问题,您想知道为什么没有显示 Form1。我认为您的 FBase 构造函数是原因:

public FBase(bool owner) : this()
{
   if (!owner) { this.Opacity = 0; Load += (s, e) => Close(); }
}

在那里你告诉Close();表单加载事件。所以如果所有者为假,它将直接关闭。此外,您应该在 OpenSingleMdiChild-Method 中使用一些返回值。因为正如@PeterBons 指出的那样,这真的很难阅读。

此外,这段代码对我来说不是很清楚:

using (Form1 f = new Form1(false))
{
    if(f != null) { f.MdiParent = parent; f.Show(); }
}

你显示一个Form并直接销毁它?为什么有人要这样做?

我希望它能回答你的问题。否则请问一些真正的问题;)。

于 2016-11-20T20:57:24.893 回答