C# 从InitializeComponent调用基类方法

C# 从InitializeComponent调用基类方法,c#,winforms,C#,Winforms,我正在创建一个基于原型的表单应用程序,其中将有一个用于所有表单的基础模板。模板中有一个方法,在构造控件时需要由实际表单调用 表格1.cs: public partial class Form1 : FormBase { public Form1():base() { InitializeComponent(); } ... 表格1.Designer.cs: private void InitializeComponent() { this

我正在创建一个基于原型的表单应用程序,其中将有一个用于所有表单的基础模板。模板中有一个方法,在构造控件时需要由实际表单调用

表格1.cs:

public partial class Form1 : FormBase
{
    public Form1():base()
    {
        InitializeComponent();
    }
    ...
表格1.Designer.cs:

private void InitializeComponent()
{
    this.lblName = new MLabel();
    this.fldName = new MTextBox();
    this.lblUserID = new MLabel();
    this.fldUserID = new MTextBox();

    this.SuspendLayout();

    this.AddControl(lblName, fldName);
    this.AddControl(lblUserID, fldUserID);
FormBase.cs:

public partial class FormBase : Form
{
    public FormBase()
    {
        InitializeComponent();
    }
    protected void AddControl(Label lbl, Control ctrl)
    {
        //do something
    }
    ...
没有编译错误,但是,当我在IDE中打开Form1设计时,它说找不到FormBase.AddControl。即使在我运行应用程序时,该方法似乎也没有被调用


谢谢。

试着从Form1.cs调用方法AddControl,不要从Form1.Designer.cs调用它


如果这种方法仍然失败,请告诉我。:)

尝试从Form1.cs调用方法AddControl,不要从Form1.Designer.cs调用它


如果这种方法仍然失败,请告诉我。:)

这是第二个备选方案:

把这部分换一下

protected void AddControl(Label lbl, Control ctrl)
{
    //do something
}
为此:

public void AddControl(Label lbl, Control ctrl)
{
    //do something
}

这是第二个备选方案:

把这部分换一下

protected void AddControl(Label lbl, Control ctrl)
{
    //do something
}
为此:

public void AddControl(Label lbl, Control ctrl)
{
    //do something
}

我尝试从designer调用的目的是我可以在IDE中看到设计,这样我就可以轻松地进行更改。无论如何,我将检查从form.oh调用,那么您想要的是用您的模板替换Form1.Designer.cs的InitializeComponent方法中自动生成的部分?不建议将代码放在InitializeComponent方法中,因为当您使用Designer UI时,它将被自动替换。不建议将代码放在InitializeComponent方法中,因为当您使用设计器UI时,它将被自动替换。但是当然,这仍然是可能的。只需将AddControl方法的访问修饰符更改为public。现在,您可以在设计时看到您的更改。我尝试从designer调用的目的是我可以在IDE中看到设计,以便轻松地进行更改。无论如何,我将检查从form.oh调用,那么您想要的是用您的模板替换Form1.Designer.cs的InitializeComponent方法中自动生成的部分?不建议将代码放在InitializeComponent方法中,因为当您使用Designer UI时,它将被自动替换。不建议将代码放在InitializeComponent方法中,因为当您使用设计器UI时,它将被自动替换。但是当然,这仍然是可能的。只需将AddControl方法的访问修饰符更改为public。现在,您可以看到在设计时所做的更改。请勿在InitializeComponent()中编辑代码。当设计器重写方法时,您将丢失更改,或者当设计器无法分析您的更改时,您将轰炸设计器。切勿在InitializeComponent()中编辑代码。当设计器重写方法时,您将丢失更改,或者当设计器无法解析您的更改时,您将轰炸设计器。