C#覆盖基本表单文本 - InitializeComponent

时间:2015-12-04 14:49:46

标签: c#

问题:当我执行我的代码时,它会从继承的基类中正确地提取代码,并正确地更改基本表单的文本。但是,只要我在VS2013的调试器模式下,返回到派生类并跳过InitizlieComponent();召唤一切都归还了。当我说'还原'时,我的意思是回到他们在设计师中为派生形式的方式。

所有帮助将不胜感激!

派生类

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;
       }
    }
}

2 个答案:

答案 0 :(得分:0)

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

这是什么,正是你所说的。它覆盖了基础初始化的所有内容。

我相信你可以删除它,它会没事的:

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

        }

在此处详细了解:http://www.dotnetperls.com/initializecomponent

修改

以下是我用两种形式进行的一些测试。一个来自另一个。基本形式有一个标签。第二个添加另一个标签。在创建派生类型的表单时,tou会获得一个带有两个标签的表单。我做的是使用InitializeComponent();在基础和派生形式。

代码:

public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();
            label1.Text = "asdf";
        }
    }
...
public partial class DerivedForm : BaseForm
    {
        public DerivedForm()
        {
            InitializeComponent();
            label2.Text = "asdfasfd";
        }
    }

执行代码时会发生基本初始化。然后,派生初始化仅添加添加功能。 它看起来很简单,但我注意到你只有一个InitializeComponent();在上面的代码中将实际发生。

答案 1 :(得分:0)

戴夫 您编辑的帖子几乎就是我最终要解决的问题。由于我重写了基本表单的.Text()属性,我发现我甚至不必在构造函数中传递任何东西。只需在代码或设计器中设置表单文本,就可以为我改变一切。