C#覆盖基格式文本-初始化组件

C#覆盖基格式文本-初始化组件,c#,C#,问题:当我执行代码时,它会正确地从继承的基类中提取代码,并正确地更改基类的文本。但只要我在VS2013的调试器模式下回到派生类并跨过initizLetchComponent();一切都恢复了。当我说“还原回”时,我的意思是,返回到派生形式的设计器中的方式 所有的帮助将不胜感激 派生类 public partial class appSuiteMenu : App.baseForm { public appSuiteMenu() : base("App Suite")

问题:当我执行代码时,它会正确地从继承的基类中提取代码,并正确地更改基类的文本。但只要我在VS2013的调试器模式下回到派生类并跨过initizLetchComponent();一切都恢复了。当我说“还原回”时,我的意思是,返回到派生形式的设计器中的方式

所有的帮助将不胜感激

派生类

public partial class appSuiteMenu : App.baseForm
{
    public appSuiteMenu()
        : base("App Suite")
    {
        InitializeComponent();
    }
}
基类

public partial class baseForm : Form
{
   public baseForm() { InitializeComponent(); }  //Required or designer breaks
   public baseForm(string formTitle=null)
   {
      this.initialize(formTitle);   
   }

   private void initialize(string formTitle)
   {
      base.text = formTitle + " - " + //Other objects are called from the class
   }

   public override string Text
   {
      get 
      { 
         return base.Text;          
       }
       set 
       { 
          base.Text = value;
       }
    }
}

我猜是对派生类中“InitializeComponent()”的第二次调用

他所做的,正是你所说的。它覆盖了从基本初始化开始的所有内容

我相信你可以移除它,一切都会好起来:

public appSuiteMenu()
            : base("App Suite")
        {

        }
请在此处阅读更多信息:

编辑:

这里是我用两种形式做的一些测试。一个是从另一个派生出来的。基本表单包含一个标签。第二个来自添加另一个标签。创建派生类型的表单时,会得到一个带有两个标签的表单。我所做的是使用InitializeComponent();以基本形式和派生形式

守则:

public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();
            label1.Text = "asdf";
        }
    }
...
public partial class DerivedForm : BaseForm
    {
        public DerivedForm()
        {
            InitializeComponent();
            label2.Text = "asdfasfd";
        }
    }
代码执行过程中发生的是基本初始化。然后,派生初始化只添加添加功能。
这看起来很简单,但我注意到您只有一个InitializeComponent();在上面的代码中,这将实际发生。

我猜将是对派生类中“InitializeComponent()”的第二次调用

他所做的,正是你所说的。它覆盖了从基本初始化开始的所有内容

我相信你可以移除它,一切都会好起来:

public appSuiteMenu()
            : base("App Suite")
        {

        }
请在此处阅读更多信息:

编辑:

这里是我用两种形式做的一些测试。一个是从另一个派生出来的。基本表单包含一个标签。第二个来自添加另一个标签。创建派生类型的表单时,会得到一个带有两个标签的表单。我所做的是使用InitializeComponent();以基本形式和派生形式

守则:

public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();
            label1.Text = "asdf";
        }
    }
...
public partial class DerivedForm : BaseForm
    {
        public DerivedForm()
        {
            InitializeComponent();
            label2.Text = "asdfasfd";
        }
    }
代码执行过程中发生的是基本初始化。然后,派生初始化只添加添加功能。 这看起来很简单,但我注意到您只有一个InitializeComponent();在上面的代码中,这将实际发生。

Dave, 你编辑的帖子几乎就是我最后纠正问题的方法。因为我重写了基表单的.Text()属性,我发现我甚至不需要在构造函数中传递任何东西。只需在代码或设计器中设置表单文本,我就能改变一切

戴夫,
你编辑的帖子几乎就是我最后纠正问题的方法。因为我重写了基表单的.Text()属性,我发现我甚至不需要在构造函数中传递任何东西。只需在代码或设计器中设置表单文本,我就能改变一切

戴夫,谢谢你的回复。如果删除派生类中的InitializeComponent()并执行代码,则显示的是基表单。它确实像我希望代码那样显示正确的文本。但是,我在表单(appSuiteMenu())上编写的所有控件和代码都没有显示出来。我的假设是VS在从派生类调用InitializeComponent()时在表单上构建、绑定和显示所有这些控件。所以,很明显我不明白什么。可能是什么?嘿,这有点道理。阅读我添加的文档,并尝试在设计器中查看自动生成的代码。然后,您将确切地了解每个InitializeComponent()在表单中放置的内容。此外,您还可以调试此代码段,并确定何时添加/删除所有所需控件。希望你能找到你的答案你与DotNetPerls的链接证实了我的怀疑。由于我使用设计器在派生表单上放置控件,因此一旦调用InitializeComponenet()方法,它将被覆盖。如果我将参数传递给基表单构造函数,那么表单继承应该如何工作?太好了!如果你觉得我对你有帮助,我将非常感谢你的支持:)戴夫,谢谢你的回复。如果删除派生类中的InitializeComponent()并执行代码,则显示的是基表单。它确实像我希望代码那样显示正确的文本。但是,我在表单(appSuiteMenu())上编写的所有控件和代码都没有显示出来。我的假设是VS在从派生类调用InitializeComponent()时在表单上构建、绑定和显示所有这些控件。所以,很明显我不明白什么。可能是什么?嘿,这有点道理。阅读我添加的文档,并尝试在设计器中查看自动生成的代码。然后,您将确切地了解每个InitializeComponent()在表单中放置的内容。此外,您还可以调试此代码段,并确定何时添加/删除所有所需控件。希望你能找到你的答案你与DotNetPerls的链接证实了我的怀疑。由于我使用设计器在派生表单上放置控件,因此一旦调用InitializeComponenet()方法,它将被覆盖。如果我将参数传递给基表单构造函数,那么表单继承应该如何工作?太好了!如果您觉得我有帮助,我将非常感谢您的支持:)