在我最新的WinForms项目中,我的Main表单背后的代码已经开始变得太大而且难以阅读。在我读过的其他帖子中,我看到过建议创建另一个类的主要形式的部分类的建议,然而,真正让我感到困惑的是,您创建的新类会自动生成另一个空白设计窗口。我真的在寻找一种方法将我的代码分解为多个部分类,但只有一个主设计窗口。
例如,在下面的项目中,我的主窗口是Form1.cs。
当我第一次创建新的类文件(Form1Part2.cs)时,该文件显示为不包含自己的表单设计器窗口的c#类。 (这几乎是我想要的,除了它需要连接到Form1类,所以我可以访问它的控件和属性)
Before making class a partial class:
但是,当我将新类作为Form1的部分类时,该文件将成为包含其自己的设计窗口的表单。
答案 0 :(得分:0)
在我最新的WinForms项目中,我的主表单背后的代码有 开始变得太大而且难以阅读。
这开始时似乎很关注。
在我读过的其他帖子中,我看到了一些建议 比如创建另一个类,它是主窗体的部分类
这似乎更令人担忧,我认为没有太多理由这样做,只是看起来code-smelly。
Separation of concerns和DRY,创建帮助程序类(或其他),将表单中的问题抽象为可管理的逻辑问题。您甚至可以在以后找到一些可重用的,同时也从后面的代码中删除实际的真实逻辑。
即使它只是形式相关,我发现可读代码和类比10000行代码更容易消化,我确信它可以在逻辑上分解。
此外,也许有些情况会以MVVM模式,甚至Decoupled以其他各种方式更好。
但是,如果不对代码进行深入分析,很难真正知道
<强>更新强>
抱歉,我刚看到你在 Winforms ,所以 MVVM 评论可能有点无关
答案 1 :(得分:0)
这就是为什么你应该避免partial
类,除非你正在编写代码生成器......
问题是您需要使Form1Part2.cs
依赖于Form1.cs
,唯一的方法是编辑项目文件:
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Form1Part2.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
“神奇”部分就是这个:
<Compile Include="Form1Part2.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
因为当您将partial
添加到代码并重命名它包含的类时,Visual Studio会将其称为表单子类型,如下所示:
<Compile Include="Form1Part2.cs">
<SubType>Form</SubType>
</Compile>
这导致设计器在您单击时加载,并且因为它没有依赖项或.designer.cs
文件,Forms Designer不会加载您正在设计的实际表单,只是一个空白设计器(如果你向它添加控件,它会出现在partial类中并创建一个额外的RESX文件,导致各种问题)。
更改该XML以使Form1Part2.cs成为Form1.cs
的依赖项。您只能通过手动编辑.csproj文件来完成此操作。最简单的方法是在记事本中打开它,但您可以在Visual Studio中通过右键单击它,卸载项目,然后再次右键单击并选择“编辑xxx.csproj”来编辑它。进行更改然后右键单击项目并重新加载。
完成此操作后,您的新.cs文件将与设计器和代码隐藏一起显示在Form1.cs下: