C#覆盖基格式文本-初始化组件
问题:当我执行代码时,它会正确地从继承的基类中提取代码,并正确地更改基类的文本。但只要我在VS2013的调试器模式下回到派生类并跨过initizLetchComponent();一切都恢复了。当我说“还原回”时,我的意思是,返回到派生形式的设计器中的方式 所有的帮助将不胜感激 派生类C#覆盖基格式文本-初始化组件,c#,C#,问题:当我执行代码时,它会正确地从继承的基类中提取代码,并正确地更改基类的文本。但只要我在VS2013的调试器模式下回到派生类并跨过initizLetchComponent();一切都恢复了。当我说“还原回”时,我的意思是,返回到派生形式的设计器中的方式 所有的帮助将不胜感激 派生类 public partial class appSuiteMenu : App.baseForm { public appSuiteMenu() : base("App Suite")
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()方法,它将被覆盖。如果我将参数传递给基表单构造函数,那么表单继承应该如何工作?太好了!如果您觉得我有帮助,我将非常感谢您的支持:)