【问题标题】:Inherit from UserControl - double UI?从 UserControl 继承 - 双 UI?
【发布时间】:2020-01-15 00:11:06
【问题描述】:

我对 WinForm 项目中 UserControl 的继承有疑问。

我有几个特定的​​面板,它们是我的应用程序的不同页面。 但是这些特定面板在每个面板中都重复了一些通用代码。

所以我想在从 UserControl 继承的 StdPanel 类中编写它们的共同行为,然后每个特定页面都将从 StdPanel 继承。

一个特定的面板:

    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 是在 SpecificPanel1 中完成的,我认为没有必要。

SpecificPanel1 有两个 GUI 吗?

这两个 GUI 是如何嵌套的?它们是否出现在屏幕上但一个隐藏了第二个?

谢谢

【问题讨论】:

  • 您想使用 WIndows-Forms Designer 吗?然后保持线路。它对这个类很特别,它不是继承的什么的,你可以检查那里发生了什么。如果您已经通过属性窗口创建了事件处理程序,则最好保持原样。你在说什么接口?您的代码中没有接口。
  • @Holger 猜他指的是 GUI 而非 C# 接口
  • 是的,我指的是 GUI 而不是界面。谢谢。
  • 您可以使用InitializeComponent()重新定义继承组件的布局。通常,您的基类控件的访问修饰符设置为private。在这种情况下,派生类的InitializeComponent() 方法无法重新定义基类的布局。可以将修饰符设置为protected/protected internal,这样就可以在派生类中重新定义这些控件的布局。这种特定于派生类的新行为随后在 InitializeComponent() 中定义,在初始化派生类时调用。
  • 派生类的InitializeComponent()方法可以在基类模板的基础上添加local,重新定义/特化图形界面。不过,还有更多与表单设计器要求相关的内容,因为基类和派生类都有自己的设计器。

标签: c# winforms inheritance


【解决方案1】:

“部分”一词将一个类拆分为两个文件。没有两个类,也没有两个 GUI。只有一个类的两个源代码文件。

这有助于将生成的代码与您自己手动编写的代码分开。

你可以查看的designer.cs,但最好不要修改它(除非你知道自己在做什么)。

【讨论】:

  • 即使您知道自己在做什么,也应该将其视为只读,因为设计器 UI 可以并且会覆盖您的更改。
  • 也许我的问题不够清楚:SpecificPanel1 中有一个 InitializeComponent(),StdPanel 中有一个 InitializeComponent()。 SpecificPanel1 继承自 StdPanel。有两个GUI吗?每个 InitializeComponent() 都在生成一个 GUI,不是吗?
  • @Timmeh 仅当设计师开放时才如此。 Designer 将读取此文件以显示可视化 UI。只要他能看懂,一切都好。
  • @Aurel 你不应该那样做。不要从 Designer 创建的 UserControls 继承。而是将一个控件放入另一个控件中。 (就像您在控件中放置标签一样)。答案还是一样:不要删除,如果你想使用 Designer。并查看“InitilizeComponent”以了解其中发生了什么。
猜你喜欢
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多