当我编写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 会自动将<SubType>Form</SubType>
添加到DependentUpon
元素之后。双击 Form1.Implementation.cs 不会显示代码,而是显示一个带有另一个初始空窗体的设计器。
就像是
class * Form 1 *,其中伊萨 Form 是(?)多个窗体。
我尝试了adding DesignerCategory
attribute来类 * Form 1 *,但它也影响 Form1.cs。
嗯,按下“Shift-F7”或“Ctrl-Shift-0”没什么大不了的。我想知道...
1.这是 * VisualStudio * 一个小故障,
1.第二种形式确实存在
1.总有一天会毁掉我的winforms项目
1条答案
按热度按时间qqrboqgw1#
实现你所尝试的唯一方法是添加
<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)的类 (甚至是部分!) 的代码文件都会在设计器中自动打开。
这里的解决方案很简单-要么创建一个代码文件,定义一个不基于Form的单独类,要么使用F7在解决方案资源管理器中查看该文件的代码,无论这看起来多么烦人。该代码文件是否是
<DependentUpon>
都无关紧要。只有Form或UserControl的继承才重要。不过,在我看来,最好的解决方案是坚持使用Visual Studio提供的功能:
这是我的团队几年来一直坚持的方法。它提供了分离Designer代码和手工编码操作的基本方法。为了更好地分离代码,请使用设计模式,如MVP,正如Simon Whitehead在评论中所建议的那样。