2014-02-17 36 views
1

当我编写一个winforms应用程序时,我倾向于为每个表单创建一个Implementation.cs文件。部分类有多种形式

说我有Form1.cs中,我想创建一个名为Form1.Implementation.cs开始partial class Form1新文件。

Form1.cs的只是包含了所有的事件回调方法(什么设计师做了),其他的一切去Form1.Implementation.cs。它可以帮助我编写更多可读代码。


我想Form1.Implementation.cs是一个 “子文件” 就像Form1.Designer.cs是,所以我编辑.csproj的文件。

<Compile Include="Form1.Implementation.cs"> 
    <DependentUpon>Form1.cs</DependentUpon> 
</Compile> 

重装以后,然而,的Visual Studio自动右后DependentUpon元素添加<SubType>Form</SubType>。双击Form1.Implementation.cs不显示代码,但具有另一个初始空表单的设计器。

这就像

“类Form1中,其中ISA 形式,是(?)多种形式。”

我试图adding DesignerCategory attributeForm1类,但它影响Form1.cs中,也是如此。

那么,点击'Shift-F7'或'Ctrl-Shift-0'并不是什么大不了的事。 不知...

  1. 的Visual Studio的毛刺
  2. 二级(?)的形式确实在某种程度上存在,
  3. 它会炸掉我的WinForms项目哪天
+1

您应该考虑朝着代码更“架构”的方向发展。也许MVP会适合..你的表单仅仅是一个愚蠢的观点,并且实际的代码位于Presenters中。 –

+1

该属性适用于Form1 _type_,不适用于其某个_source文件_。事实上,部分类只存在于代码中,并在编译期间被合并。 –

回答

2

实现您尝试的唯一方法是添加您已知的<DependentUpon>。现在,Visual Studio会自动为Form中的任何类添加<SubType>Form</SubType>。由于您的Form1.cs可能包含行public partial class Form1 : Form,这是SubType来自的位置。

其他文件 - Form1.Designer.csForm1.Implementation.cs可能只包含partial class Form1,但由于在多个文件中部分类定义仍然有效的一个类定义,Visual Studio中检测到它依然继承Form。我相信你可能已经知道,但以防万一here's the MSDN article about the partial keyword。在这种情况下,不要担心存在多个Form的实例。请记住,这仍然只是一个类 - Form1,不管你传播多少个文件。

最后,包含类所有代码文件(即使是部分!)继承Form(或UserControl)在设计器自动打开。这是行为设计​​。

这里的解决方案很简单 - 或者使代码文件定义一个不基于Form的独立类,或者只是使用F7在解决方案资源管理器中查看该文件的代码,但看起来令人讨厌。这个代码文件是否为<DependentUpon>并不重要。只有FormUserControl的继承关系。

最好的解决办法,虽然,在我看来,将坚持什么Visual Studio是给你:

  • 设计器生成的代码停留在Form1.Designer.cs
  • 您的代码(你把实施),什么Form1.cs的去(按F7键可查看的不是去设计)
代码

这是我的团队几年来一直坚持的方法。它提供了分离Designer代码和手动编码操作的基本方法。为了更好地分离您的代码,请使用Simon Whitehead在注释中建议的设计模式,如MVP。