C#:将一个类拆分成多个文件(带有一个表单)

时间:2009-08-20 13:58:50

标签: c# file

使用:C#,VS2008

我有以下主要表单类:

[Main.cs]

namespace Server
{
   public partial class PipeServerform : System.Windows.Forms.Form
   {
   ...
   }
}

但它很长很长,并且包含GUI +逻辑代码。

因此,我将该类分成多个文件以便于管理,并创建仅保存逻辑详细信息的文件:

[DoCommands.cs]

namespace Server
{
   public partial class PipeServerform : System.Windows.Forms.Form
   {
   ...
   }
}

这有效... 但是! VS2008项目中的' DoCommands.cs '文件现在有一个默认的空白GUI'表单'与之相关的窗口。

这是有意义的,因为它仍然是主要表单类的一部分,但我认为不同文件之间的分离会告诉VS2008它只是简单命令的逻辑文件持有者,并且不包含任何GUI表单代码。

有没有简单的方法来解决这个问题?这样' DoCommands.cs '文件没有与之相关的空白GUI表单?

或者我是否必须将它分成不同的类?

感谢。

5 个答案:

答案 0 :(得分:7)

如果要在PipeServerForm下使其自身从属,请在文本编辑器中打开项目文件。你会发现一个看起来像这样的块:

<Compile Include="DoCommands.cs">
  <SubType>Form</SubType>
</Compile>

将其更改为:

<Compile Include="DoCommands.cs">
  <DependentUpon>Main.cs</DependentUpon>
</Compile>

现在,当您加载项目时,DoCommands.cs应显示在Main.cs下,就像Main.Designer.cs一样。我注意到VS似乎自动添加SubType元素,因此DoCommands.cs默认情况下仍会在窗体设计器中打开。也许有一个简单的解决方案。

答案 1 :(得分:5)

我很确定您不必为部分类指定所有继承。因此,如果您只是从DoCommands.cs文件的继承列表中删除System.Windows.Forms.Form,那么您应该是金色的。

修改:另外,考虑到主表单的大小,您可能需要考虑重构。请考虑遵循MVCMVP模式。将您的问题分成单独的类,甚至可能是模块。

答案 2 :(得分:1)

您的部分表单扩展不需要从System.Windows.Forms.Form继承 - 就像您的PipeServerform.designer.cs不继承它一样。

答案 3 :(得分:1)

我使用继承而不是部分实现来在多个文件中拆分表单功能,而不会在打开辅助文件时获取该空白设计器表单。

<强> [MainForm.cs]

[System.ComponentModel.DesignerCategory("Form")]
public partial class MainForm : MainFormFeature
{
...
}

<强> [MainForm.Designer.cs]

partial class MainForm
{
...
}

<强> [MainForm.Feature.cs]

[System.ComponentModel.DesignerCategory("Code")]
public class MainFormFeature: Form
{
...
}

然后,如上所述,编辑项目文件并为Feature文件添加以下内容,以显示在解决方案资源管理器中Designer旁边。

<Compile Include="MainForm.Feature.cs">
  <DependentUpon>MainForm.cs</DependentUpon>
</Compile>

这是我能找到的唯一解决方案,可以让它在Visual Studio中很好地运行而不会获得那个空白的设计器表单。从对象设计的角度来看,它也可能是有意义的。

答案 4 :(得分:0)

上述解决方案在 VS2019 中都不适合我,但是以下 IMO 是一个很好的解决方法:

在您的 .csproj 文件中找到

<Compile Include="DoCommands.cs" />

(或类似的东西)并将其修改为

<Compile Include="DoCommands.cs">
  <DependentUpon>Main.cs</DependentUpon>
  <SubType>Designer</SubType>
</Compile>

这可确保当您在解决方案资源管理器中双击 DoCommands.cs 文件时,它会以代码形式打开。它还将 DoCommands.cs 文件放在层次结构中的 Main.cs 下。