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)时,我会收到如下错误:
变量 'fontLabel' 未声明或从未分配。
变量 'fontButton' 未声明或从未分配。
变量 'sizeButton' 未声明或从未分配。
变量 'fontGrid' 未声明或从未分配。
此时我可以点击 "Ignore and Continue.",尽管设计器/表单视图中的大小/字体为 8.25,因此它显然无法从我继承的属性中读取。再次 - 当我点击 "Start."
时一切正常
有人对解决这个问题有什么建议吗?
谢谢!
麦克
设计器无法加载,因为当设计器反序列化MembershipView.Designer.cs
文件中的代码时,它看到this.label5.Font = fontLabel;
,因此它在文件中查找fontLabel
字段的声明并且还希望在文件的 InitializeComponent
中找到字段的初始化。但是文件中不存在声明和初始化,因此设计器无法正确加载。
有关设计师工作方式的更多信息,请查看此 post。 post 还包含一个非常有趣的示例:
我应该怎么做才能获得一些基本设置,例如字体、大小?
您可以使用 属性 绑定到应用程序设置,而不是将此类设置放在基础中。通过这种方式,您可以创建一些基本设置,例如 Font
类型的 ButtonFont
或 Size
类型的 ButtonSize
,然后在设计时使用 属性 网格,绑定Font
和 Size
属性 of Button
控制这些设置属性。您还可以将这些设置用于控件的其他属性。
要了解有关 属性 绑定到应用程序设置的更多信息,请查看此 post:
我遇到了同样的问题,我已经解决了。实际上 Visual Studio 仅适用于 X86 控件,您无法在 X64 模式下创建用户控件并使用它。
您应该在任何 CPU 模式下添加一个新的 class 库并构建 class 库。然后你可以在你的项目中添加它的 DLL。完成。
如果不是,您必须转到配置管理器并将活动解决方案平台设置为 X64,同时对所有子项目执行此操作。请记住,必须检查构建选项。然后转到 class 库的属性并单击构建选项卡。然后将平台目标设置为 Any CPU.
在我的解决方案中,我有多个 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)时,我会收到如下错误:
变量 'fontLabel' 未声明或从未分配。
变量 'fontButton' 未声明或从未分配。
变量 'sizeButton' 未声明或从未分配。
变量 'fontGrid' 未声明或从未分配。
此时我可以点击 "Ignore and Continue.",尽管设计器/表单视图中的大小/字体为 8.25,因此它显然无法从我继承的属性中读取。再次 - 当我点击 "Start."
时一切正常有人对解决这个问题有什么建议吗?
谢谢! 麦克
设计器无法加载,因为当设计器反序列化MembershipView.Designer.cs
文件中的代码时,它看到this.label5.Font = fontLabel;
,因此它在文件中查找fontLabel
字段的声明并且还希望在文件的 InitializeComponent
中找到字段的初始化。但是文件中不存在声明和初始化,因此设计器无法正确加载。
有关设计师工作方式的更多信息,请查看此 post。 post 还包含一个非常有趣的示例:
我应该怎么做才能获得一些基本设置,例如字体、大小?
您可以使用 属性 绑定到应用程序设置,而不是将此类设置放在基础中。通过这种方式,您可以创建一些基本设置,例如 Font
类型的 ButtonFont
或 Size
类型的 ButtonSize
,然后在设计时使用 属性 网格,绑定Font
和 Size
属性 of Button
控制这些设置属性。您还可以将这些设置用于控件的其他属性。
要了解有关 属性 绑定到应用程序设置的更多信息,请查看此 post:
我遇到了同样的问题,我已经解决了。实际上 Visual Studio 仅适用于 X86 控件,您无法在 X64 模式下创建用户控件并使用它。
您应该在任何 CPU 模式下添加一个新的 class 库并构建 class 库。然后你可以在你的项目中添加它的 DLL。完成。
如果不是,您必须转到配置管理器并将活动解决方案平台设置为 X64,同时对所有子项目执行此操作。请记住,必须检查构建选项。然后转到 class 库的属性并单击构建选项卡。然后将平台目标设置为 Any CPU.