C# 从UserControl继承-双UI?
我对WinForm项目中UserControl的继承有疑问 我有几个特定的面板,它们是我的应用程序的不同页面。 但是这些特定的面板在每个面板中都有一些重复的公共代码 因此,我想在从UserControl继承的StdPanel类中对它们的常见行为进行编码,然后每个特定页面将从StdPanel继承 具体小组:C# 从UserControl继承-双UI?,c#,winforms,inheritance,C#,Winforms,Inheritance,我对WinForm项目中UserControl的继承有疑问 我有几个特定的面板,它们是我的应用程序的不同页面。 但是这些特定的面板在每个面板中都有一些重复的公共代码 因此,我想在从UserControl继承的StdPanel类中对它们的常见行为进行编码,然后每个特定页面将从StdPanel继承 具体小组: public partial class SpecificPanel1 : StdPanel { public SpecificPanel1 () : bas
public partial class SpecificPanel1 : StdPanel
{
public SpecificPanel1 () : base()
{
InitializeComponent();
}
}
标准配电盘:
public partial class StdPanel: UserControl
{
public StdPanel()
{
InitializeComponent();//Keeping this line or not?
}
private void StdPanel_VisibleChanged(object sender, EventArgs e)
{
if (Visible)
{
//do stuff...
}
}
}
我的问题是:
我的问题是:
我想在StdPanel_VisibleChanged时做一些事情,我做了很多测试,我知道InitializeComponent()是使StdPanel_VisibleChanged事件工作所必需的。
首先,我想从StdPanel中删除InitializeComponent(),因为GUI是在特定的Panel1中完成的,我认为这是不必要的
那么SpecificPanel1有两个GUI吗
这两个GUI是如何嵌套的?它们是否出现在屏幕上,但一个隐藏第二个
谢谢单词“partial”将一个类拆分为两个文件。没有两个类和两个GUI。只有一个类的两个源代码文件
这有助于将生成的代码与手动编写的代码分离
您可以查看designer.cs,但最好不要修改它(除非您知道自己在做什么)。单词“partial”将一个类拆分为两个文件。没有两个类和两个GUI。只有一个类的两个源代码文件
这有助于将生成的代码与手动编写的代码分离
您可以查看designer.cs,但最好不要修改它(除非您知道自己在做什么)。是否要使用WIndows窗体设计器?那就守住电话线。它对这个类来说是特殊的,它不是继承的或者什么的,你可以检查里面发生了什么。如果您已经通过属性窗口创建了事件处理程序,那么最好保持原样。你在说什么接口?您的代码中没有接口。@霍尔格猜他指的是GUI而不是C#interface是的,我指的是GUI而不是interface。谢谢。您可以使用
InitializeComponent()
重新定义继承组件的布局。通常,基类控件的访问修饰符设置为private
。在这种情况下,派生类的InitializeComponent()
方法无法重新定义基类的布局。您可以将修饰符设置为protected
/protectedinternal
,以便可以在派生类中重新定义这些控件的布局。然后在初始化派生类时调用的InitializeComponent()
中定义派生类特有的新行为。派生类的InitializeComponent()
方法可以对基类模板进行局部添加,以重新定义/专门化图形界面。不过,还有更多与表单设计器要求相关的内容,因为基类和派生类都有自己的设计器。是否要使用WIndows表单设计器?那就守住电话线。它对这个类来说是特殊的,它不是继承的或者什么的,你可以检查里面发生了什么。如果您已经通过属性窗口创建了事件处理程序,那么最好保持原样。你在说什么接口?您的代码中没有接口。@霍尔格猜他指的是GUI而不是C#interface是的,我指的是GUI而不是interface。谢谢。您可以使用InitializeComponent()
重新定义继承组件的布局。通常,基类控件的访问修饰符设置为private
。在这种情况下,派生类的InitializeComponent()
方法无法重新定义基类的布局。您可以将修饰符设置为protected
/protectedinternal
,以便可以在派生类中重新定义这些控件的布局。然后在初始化派生类时调用的InitializeComponent()
中定义派生类特有的新行为。派生类的InitializeComponent()
方法可以对基类模板进行局部添加,以重新定义/专门化图形界面。不过,还有更多与表单设计器要求相关的内容,因为基类和派生类都有自己的设计器。即使您知道自己在做什么,也应该将其视为只读,因为设计器UI可以并将覆盖您的更改。也许我的问题不够清楚:有一个InitializeComponent()在SpecificPanel1和StdPanel中的一个InitializeComponent()。SpecificPanel1继承自StdPanel。有两个GUI吗?每个InitializeComponent()都在生成一个GUI,不是吗?@Timmeh只有在设计器打开时才是这样。设计器将读取此文件以显示可视化UI。只要他能读,一切都好。@Aurel你不应该那样做。不要从设计器创建的用户控件继承。而是将一个控件放入另一个控件中。(就像在控件中放置标签一样)。答案仍然是一样的:如果你想使用Designer,不要删除它。并查看“InitilizeComponent”以了解其中发生的情况。即使您知道自己在做什么,也应该将其视为只读,因为设计器UI可以并将覆盖您的更改。也许我的问题还不够清楚:SpecificPanel1中有一个InitializeComponent(),StdPanel中有一个InitializeComponent()。SpecificPanel1继承自StdPanel。有两个GUI吗?每个InitializeComponent()都在生成一个GUI,不是吗?@Timmeh只有在设计器打开时才是这样。设计器将读取此文件以显示可视化UI。只要他能读,一切都好。@Aurel你不应该那样做。不要从设计器创建的用户控件继承。而是将一个控件放入另一个控件中。(就像在控件中放置标签一样)。答案仍然是一样的:如果你想使用Designer,不要删除它。看看“我