问题:当我执行我的代码时,它会从继承的基类中正确地提取代码,并正确地更改基本表单的文本。但是,只要我在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;
}
}
}
答案 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()属性,我发现我甚至不必在构造函数中传递任何东西。只需在代码或设计器中设置表单文本,就可以为我改变一切。