C# Windows窗体设计器类继承导致错误';变量';未声明或从未分配

C# Windows窗体设计器类继承导致错误';变量';未声明或从未分配,c#,winforms,inheritance,windows-forms-designer,designer,C#,Winforms,Inheritance,Windows Forms Designer,Designer,在我的解决方案中,我有多个表单/视图,希望使用全局属性设置基本表单控件属性(字体名称、大小、颜色等) Designer.cs文件是一个分部类,当您执行“查看代码”时,它显然是主分部类的一部分。这是一个从“表单”继承的类。因此,我创建了另一个类文件,我称之为ViewMaster.cs,并从中继承“表单”,并将我的ViewMaster类设置为表单的继承类 MembershipView.cs public partial class MembershipView : ViewMaster {

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

Designer.cs文件是一个分部类,当您执行“查看代码”时,它显然是主分部类的一部分。这是一个从“表单”继承的类。因此,我创建了另一个类文件,我称之为ViewMaster.cs,并从中继承“表单”,并将我的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;
    ...
}
现在,当我单击“开始”或“开始调试”时,这一点就起作用了,尽管当我双击表单查看器(在我的例子中是MembershipView.cs)时,会出现如下错误:

  • 变量“fontLabel”未声明或从未赋值

  • 变量“fontButton”未声明或从未赋值

  • 变量“sizeButton”未声明或从未赋值

  • 变量“fontGrid”未声明或从未赋值

此时,我可以点击“忽略并继续”。虽然designer/form view 8.25中的大小/字体,但它显然不能读取我继承的属性。再说一次,当我点击“开始”时,一切都正常

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

谢谢!
Mike

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

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

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

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

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


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

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

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

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

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


    • 我也有同样的问题,我已经解决了。实际上,VisualStudio只适用于X86控件,您不能在X64模式下创建用户控件并使用它

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


      如果没有,则必须转到Configuration manager,将活动解决方案平台设置为X64,并对所有子项目执行此操作。请记住,必须选中“生成”选项。然后转到类库的属性并单击build选项卡。然后将平台目标设置为任何CPU。

      我也遇到了同样的问题,我已经解决了。实际上,VisualStudio只适用于X86控件,您不能在X64模式下创建用户控件并使用它

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


      如果没有,则必须转到Configuration manager,将活动解决方案平台设置为X64,并对所有子项目执行此操作。请记住,必须选中“生成”选项。然后转到类库的属性并单击build选项卡。然后将平台目标设置为任何CPU。

      我发布了问题的答案。要了解更多信息,请看这篇文章:也可以看这篇文章有趣的示例部分。这将帮助你更好地了解设计师是如何工作的。我发布了一个问题的答案。要了解更多信息,请看这篇文章:也可以看这篇文章有趣的示例部分。这将帮助你更好地了解设计师是如何工作的。