2011-04-04 48 views
2

好的如此。我有一个应用程序,其中包含几个对话,它们都以相同的方式响应,并且都提供给演示者一些方法。这些都被炒成:C# - 自定义窗体的标记基类使设计视图显示HTML

 public abstract class BaseFormClass : Form

和所有其他形式有:

 public class DerivedFormClass : BaseFormClass

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


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表单的一行......)?

任何人都可以建议我可能会做错什么吗?

回答

2

我从来没有尝试过这一点,但试图在Visual Studio 2010中一样,我得到的错误The designer must create an instance of type 'WinFormsTestApp.FormA' but it cannot because the type is declared as abstract.

enter image description here

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

+0

呃。这就是为什么我不能忍受与VS世界联系在一起......感谢您的帮助。 :) – trycatch 2011-04-05 14:13:34