我有一个WinForms表单,它有多个TabControl选项卡。我通过向每个标签页添加用户控件来实现标签页的功能。这使我能够将功能分成每个页面的类,而不是面对巨大的Form类的问题。
此外,我已经定义了一个标签页基类,以提供常用功能和对应用程序参数的引用。因此继承是UserControl - > PagesBase - > MyPage1(MyPage2等)。如果PagesBase不是抽象的,这一切都很好。我可以在VS2012中正常设计各个页面。
但是,我想强制每个页面实现一组小(通用)方法和属性。首先想到的是使用抽象的PagesBase类。不幸的是,VS中的各个页面设计者无法启动,抱怨他们需要创建PagesBase的实例。
接下来的想法是将一个接口应用于PagesBase。但这并不起作用,因为它强制PagesBase定义所有常用方法等,然后它们可用于派生的MyPageN类,而无需定义自己的。接口不允许在基类中将它们定义为私有。
因此,期望任何人添加页面直接从公共接口派生(但不能强制执行此操作)或者如果页面调用基类方法而没有覆盖(没有编译时警告),则会引发运行时异常
我错过了一些明显的东西吗?有什么想法吗?
答案 0 :(得分:0)
通常情况下,一个抽象的PagesBase类(具有纯虚函数)将是一个很好的方法,除了它似乎与表单设计器不兼容(注意我不知道设计师是如何工作的)。
你能做的就是把你的班级分成两部分:
答案 1 :(得分:0)
您是否尝试在PagesBase类中添加默认构造函数(无参数)?这可能是Designer为了呈现它所期望的。