2

好吧。我有一个应用程序,其中包含多个对话框,其中包含一些事件,它们都以相同的方式响应,并且都有一些提供给 Presenter 的方法。这些都被推到了一个:

公共抽象类 BaseFormClass : 表单

所有其他形式是:

公共类 DerivedFormClass : BaseFormClass

我有一个模型-视图-演示者设置,所以基类有一些受保护的 EventHandler<EventArgs>,每个都有一个类似命名的函数,分配给该事件调用,并且存在一个 setter演示者可以分配它自己的函数来用作事件的处理程序。(换句话说:)


protected void OnFormBeginClosing(object sender, FormClosingEventArgs e)
{
    if (formClosing == null)
        return;

    formClosing(sender, e);
}

public EventHandler OnFormClose
{
    set
    {
        formClosing = value;
    }
}

protected EventHander<EventArgs> formClosing;

然后演示者使用 OnFormClose 设置器设置它自己的处理函数来处理任何必要的清理或任何必要的事情。

既然背景故事已经结束,主要问题是,为什么当我将父表单标记为抽象进行简单更改时,我的子表单的设计视图会从正常的设计视图变成只是吐出一团糟HTML(好吧,不是一团糟,一行似乎是表单的整个 HTML ......)?

谁能建议我可能做错了什么?

4

1 回答 1

2

我以前从未尝试过,但在 Visual Studio 2010 中尝试相同,我得到了错误The designer must create an instance of type 'WinFormsTestApp.FormA' but it cannot because the type is declared as abstract.

在此处输入图像描述

我怀疑这正是它所说的 - 为了显示您的派生表单,出于某种只有自己知道的原因,设计人员需要创建父表单的实例,显然不能这样做。抱歉,您可能需要重新设计您的层次结构。VS 设计者对窗体和控件的继承模式做了很多假设,所以如果你偏离标准模式,这些问题是很常见的。

于 2011-04-04T20:18:09.800 回答