【问题标题】:Abstract Forms using WinForms使用 WinForms 的抽象表单
【发布时间】:2011-06-09 05:26:38
【问题描述】:

我试图在 WinForms 应用程序中实现与 ASP.NET 中的主窗体类似的效果。我最初的想法是创建一个基本表单并将其声明为抽象,但编译器似乎不允许我这样做。

public abstract partial class Master : Form
{
    public Master()
    {
        InitializeComponent();
    }
}

所以我有两个问题:

  • 为什么编译器不允许我这样做?我是使用了错误的语法还是这是一个真正的限制。
  • 谁能提出解决方法或更好的方法来做到这一点?

编辑:

初始化组件代码:

    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.mainMenu1 = new System.Windows.Forms.MainMenu();
        this.Menu = this.mainMenu1;
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
        this.Text = "Master";
        this.AutoScroll = true;
    }

编辑:

错误如下:

The designer must create an instance of type 'Namespace.Master' but it cannot because the type is declared as abstract.

【问题讨论】:

  • 实际的编译器错误是什么?
  • 如果这正是您尝试编译的 sn-p,您需要提供 InitializeComponent() 的定义
  • 也许是 resharper 或抱怨抽象类中的公共构造函数的东西?
  • 标记基本表单类abstract 时,视觉继承将不起作用。设计者必须能够初始化该类型的对象,并且不能初始化抽象类。但这不应该导致 compiler 错误。
  • 我添加了一个编辑来指示实际的错误消息。我的印象是第一个问题的答案是这是一个真正的限制。除了将主表单创建为非抽象表单之外,任何人都可以提出另一种方法吗?

标签: c# winforms .net-3.5 compact-framework


【解决方案1】:

我正在尝试实现类似的效果 在 WinForms 应用程序中作为主控 表单与 ASP.NET 一起使用。

Winforms 实际上并没有母版页的概念。我想你最好的选择是使用 UserControls,并嵌套你的 UI 组合。

也许实现一个简单的界面,比如让访问子控件更容易一些。

public interface IMasterPage
{
 IControlContainer Container { get; }
}

只是一些想法,祝你的项目好运。

【讨论】:

  • 同意这种做法。但是为了记录,可以有一个基本的表单类并从它派生,而不是作为一个抽象类。在 .NET Compact Framework 项目中,您必须添加 DesktopCompatible(true) 自定义属性才能在设计器中使用基本形式和派生形式。
猜你喜欢
  • 2021-07-20
  • 1970-01-01
  • 2018-08-03
  • 2016-01-21
  • 1970-01-01
  • 2019-07-13
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多