winforms 分部类有多种形式

g6baxovj  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(171)

当我编写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项目

qqrboqgw

qqrboqgw1#

实现你所尝试的唯一方法是添加<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
  • 您的代码(您放入Implementation中的代码)将进入Form1.cs*(按F7查看代码,而不是进入设计器)*

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

相关问题