当我编写winforms应用程序时,我倾向于为每个表单创建一个 Implementation.cs 文件。
假设我有 Form1.cs ,我将从partial class Form1
开始创建一个名为 Form1.Implementation.cs 的新文件。
Form1.cs 只包含所有事件回调方法(设计师已完成的工作),其他所有内容都包含在 Form1.Implementation.cs 中。它帮助我编写更易读的代码。
我希望 Form1.Implementation.cs 成为一个“子文件”,就像 Form1.Designer.cs 一样,所以我编辑了 .csproj 文件。
<Compile Include="Form1.Implementation.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
重新加载后, Visual Studio 会在<SubType>Form</SubType>
元素之后立即自动添加DependentUpon
。双击 Form1.Implementation.cs 不显示代码,而是显示另一个初始空表单的设计器。
就像
“class Form1 ,ISA 表单,是(?)多种形式。”
我尝试adding DesignerCategory
attribute来分类 Form1 ,但它也会影响 Form1.cs 。
好吧,点击'Shift-F7'或'Ctrl-Shift-0'并不是什么大问题。 我想知道......
答案 0 :(得分:2)
实现您尝试的方法的唯一方法是添加您已经知道的<DependentUpon>
。现在,Visual Studio会自动为Form派生的任何类添加<SubType>Form</SubType>
。由于 Form1.cs 可能包含行public partial class Form1 : Form
,因此这是SubType的来源。
其他文件 - Form1.Designer.cs 和 Form1.Implementation.cs 可能只包含partial class Form1
,但由于多个文件中的部分类定义是仍然有效的一个类定义,Visual Studio检测到它仍然继承Form。我相信你可能已经知道了,但以防here's the MSDN article about the partial keyword。不要担心在这种情况下有Form的多个实例。请记住,这仍然只是一个类 - Form1
,而不是你传播它的文件数量。
最后,包含继承Form(或UserControl)类(甚至部分!)的所有代码文件将在Designer中自动打开。这种行为是设计使然。
这里的解决方案很简单 - 要么创建一个代码文件来定义一个不基于Form的单独的类,要么只是使用F7在解决方案资源管理器中查看该文件的代码,无论多么令人讨厌。该代码文件是否<DependentUpon>
无关紧要。只有Form或UserControl的继承很重要。
在我看来,最好的解决方案是坚持Visual Studio给你的东西:
这是我的团队已经坚持了几年的方法。它提供了分离Designer代码和手动编码操作的基本方法。为了更好地分离您的代码,请使用设计模式,如MVP,如Simon Whitehead在评论中所建议的那样。