关于c#:Windows Forms Designer类继承导致错误“变量”未声明或从未分配

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

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

designer.cs文件是一个分部类,在执行"view code"时,它显然与主分部类不同。这是从"form"继承的类。因此,我所做的是创建另一个名为viewmaster.cs的类文件,并从中继承"form",并将我的viewmaster类设置为表单的继承类。

成员关系视图.cs

1
2
3
public partial class MembershipView : ViewMaster {
    ...
}

视像大师

1
2
3
4
5
6
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

1
2
3
4
5
6
7
partial class MembershipView {
    ...
    this.label5.Font = fontLabel;
    ...
    this.btnSearch.Font = fontButton;
    ...
}

现在,当我单击"开始"或"开始调试"时,这是有效的,但是当我双击表单查看器(在我的例子中是membershipview.cs)时,我会得到如下错误:

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

  • 变量"fontbutton"未声明或从未分配。

  • 变量"sizeButton"未声明或从未赋值。

  • 变量"fontgrid"未声明或从未赋值。

我可以点击"忽略并继续"。此时,虽然Designer/Form视图8.25中的大小/字体,但显然它不会从继承的属性中读取。再一次-当我点击"开始"时,一切都正常。

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

谢谢!迈克


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

有关设计器如何工作的更多信息,请查看本文。这篇文章还包含一个非常有趣的例子:

  • 在C中编码表单时无法查看设计器#

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

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

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

  • 如何:使用设计器创建应用程序设置