Windows Forms Designer class 继承导致错误 'variable' 未声明或从未分配

Windows Forms Designer class inheritance causing error 'variable' is either undeclared or was never assigned

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

Designer.cs 文件是部分文件 class,当您执行 "View Code." 时,它显然与主要部分 class 分开 这是 class它继承自 "Form." 所以我所做的是创建另一个 class 文件,我称之为 ViewMaster.cs,并从中继承 "Form" 并设置我的 ViewMaster class作为我表单的继承 class。

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);
}

会员视图。Designer.cs

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

现在,当我单击 "Start" 或 "Start Debugging" 时,这会起作用,尽管当我双击表单查看器(在我的例子中是 MembershipView.cs)时,我会收到如下错误:

此时我可以点击 "Ignore and Continue.",尽管设计器/表单视图中的大小/字体为 8.25,因此它显然无法从我继承的属性中读取。再次 - 当我点击 "Start."

时一切正常

有人对解决这个问题有什么建议吗?

谢谢! 麦克

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

有关设计师工作方式的更多信息,请查看此 post。 post 还包含一个非常有趣的示例:

我应该怎么做才能获得一些基本设置,例如字体大小?

您可以使用 属性 绑定到应用程序设置,而不是将此类设置放在基础中。通过这种方式,您可以创建一些基本设置,例如 Font 类型的 ButtonFontSize 类型的 ButtonSize,然后在设计时使用 属性 网格,绑定FontSize 属性 of Button 控制这些设置属性。您还可以将这些设置用于控件的其他属性。

要了解有关 属性 绑定到应用程序设置的更多信息,请查看此 post:

我遇到了同样的问题,我已经解决了。实际上 Visual Studio 仅适用于 X86 控件,您无法在 X64 模式下创建用户控件并使用它。

您应该在任何 CPU 模式下添加一个新的 class 库并构建 class 库。然后你可以在你的项目中添加它的 DLL。完成。

如果不是,您必须转到配置管理器并将活动解决方案平台设置为 X64,同时对所有子项目执行此操作。请记住,必须检查构建选项。然后转到 class 库的属性并单击构建选项卡。然后将平台目标设置为 Any CPU.