导致错误“变量”的Windows窗体设计器类继承未声明或从未分配

时间:2016-07-14 22:08:55

标签: c# winforms inheritance windows-forms-designer designer

在我的解决方案中,我有多个表单/视图,并希望使用全局属性来设置基本表单控件属性(字体名称,大小,颜色等)。

Designer.cs文件是一个局部类,当您执行“查看代码”时,它显然是主要分类的一部分。这是继承自“Form”的类。所以我所做的是创建另一个类文件,我称之为ViewMaster.cs,并从中继承“Form”并将我的ViewMaster类设置为我的表单的继承类。

MembershipView.cs

public partial class MembershipView : ViewMaster {
    ...
}

ViewMaster.cs

public class ViewMaster : Form {
    public Font fontButton = new Font("Microsoft Sans Serif", 11F, FontStyle.Regular, GraphicsUnit.Point, 0);
    public Font fontLabel = new Font("Microsoft Sans Serif", 11F, FontStyle.Regular, GraphicsUnit.Point, 0); // new Font("Arial", 18F, FontStyle.Regular, GraphicsUnit.Point, 0);
    public Font fontGrid = new Font("Microsoft Sans Serif", 10F, FontStyle.Regular, GraphicsUnit.Point, 0);
    public Size sizeButton = new Size(125, 28);
}

MembershipView.Designer.cs

partial class MembershipView {
    ...
    this.label5.Font = fontLabel;
    ...
    this.btnSearch.Font = fontButton;
    ...
}

现在,当我单击“开始”或“开始调试”时,这是有效的,但是当我双击Form Viewer(在我的情况下为MembershipView.cs)时,我收到如下错误:

  • 变量'fontLabel'未声明或从未分配。

  • 变量'fontButton'未声明或从未分配。

  • 变量'sizeButton'未声明或从未分配。

  • 变量'fontGrid'未声明或从未分配过。

我能够点击“忽略并继续”。此时,虽然设计器/表单中的大小/字体视图为8.25,所以它显然不会从我继承的属性中读取。再一次 - 当我点击“开始”时,一切正常。

有人有任何建议可以解决这个问题吗?

谢谢! 麦克

2 个答案:

答案 0 :(得分:0)

设计人员无法加载,因为当设计人员对MembershipView.Designer.cs文件中的代码进行反序列化时,它会看到this.label5.Font = fontLabel;,因此它会在文件中查找fontLabel字段的声明并且还希望在文件的InitializeComponent中找到字段的初始化。但声明和初始化并不存在于文件中,因此设计人员无法正确加载。

有关设计师如何工作的更多信息,请查看此文章。该帖子还包含一个非常有趣的例子:

如何进行基本设置,例如字体尺寸

您可以使用属性绑定到应用程序设置,而不是将此类设置放在基础中。这样,您可以创建一些基本设置,例如ButtonFont Font类型或ButtonSize Size类型,然后在设计时使用属性网格,绑定{{1} Font的{​​{1}}属性控制这些设置属性。您还可以将这些设置用于控件的其他属性。

要了解有关应用程序设置的属性绑定的更多信息,请查看以下文章:

答案 1 :(得分:0)

我遇到了同样的问题,并已解决。实际上,Visual Studio仅与X86控件一起使用,您不能在X64模式下创建用户控件并使用它。

您应该在Any CPU模式下添加一个新的类库,然后构建该类库。然后可以在项目中添加其DLL。完成。

如果不是,则必须转到配置管理器并将Active solution platform设置为X64,然后对所有子项目执行此操作。请记住,必须检查构建选项。并转到类库的属性,然后单击生成选项卡。然后将平台目标设置为Any CPU。