使现有的Windows窗体可以继承

时间:2009-08-13 20:47:55

标签: c# winforms visual-studio-2008 inheritance

当我创建这个特定的应用程序时,我没有意识到我需要重用一些组件 - 一些Windows表单和一两个类。

既然我已经在一个项目中创建了相当复杂的表单,那么将这些表单转换为可以在其他项目中重用的可继承表单的最简单方法是什么?一旦完成,我想修改现有项目以使用新创建的可继承表单。

如何以尽可能小的痛苦来实现这一目标?我在Visual Studio 2008中使用C#。

4 个答案:

答案 0 :(得分:2)

你真的不需要做任何特别的事情来实现这一目标。您的表单已经可以继承。在任何新表单上,只需确保第一行看起来像这样:

public partial class frmMyChild : frmMyInheritableForm

而不是:

public partial class frmMyChild : Form

并将您需要从子项访问的任何方法设为“public”或“protected”。

更新:另一个技巧是将原始表单上每个控件的Modifiers属性设置为Protected(而不是默认的Private)。在继承自此表单的子表单的设计器中,您将看到父表单上的所有控件,您可以移动它们并根据需要调整它们的大小(这不会影响原始表单的布局)。 / p>

要从子表单访问任何父方法,只需调用:

base.MyMethod();

答案 1 :(得分:1)

只需声明一个从System.Windows.Forms.Form继承的空类,然后让你的“巨大”类从中继承。一旦有效,从一个“巨大的”类到父类,一次开始移动,一个可重复使用的小块。

答案 2 :(得分:1)

在第一个项目中,向解决方案中添加一个新的“Windows窗体控件库”

将Windows /类从原始项目拖到新项目中。

修复错误。

此时,您现在拥有了一个类库,您可以将其包含在第二个Windows项目中。

答案 3 :(得分:1)

请记住,您不需要将表单设计为可继承,以便在其他项目中使用它们。可继承的形式是PITA,除了最简单的情况之外,它们都比它们的价值更麻烦。

如果您只是想将表单设计为更容易便携式,那么最重要的是确保您不会在内部暴露内部字段(控件包含在其中)形式。如果外部代码(在相同或另一个项目中)需要以某种视觉或行为方式与表单交互,那么您需要公开表示该功能的函数和属性,而不是控件本身。

除了特定表单的设计之外,将这些常用表单移动到单独的控件库中可能会有所帮助(如果这是一个有点耗时的练习)。虽然您绝对可以将.exe作为对另一个项目的引用添加,但这并不理想(并且不完全直观)。