2016-06-20 60 views
1

我目前面临的问题是我的主文件Form.cs越来越大,我想将它分成几个部分文件。这些应该坚持在Visual Studio解决方案资源管理器的主窗体(MainForm.cs)节点下。在windows窗体节点下添加部分窗体类

我尝试创建新的类文件并将其声明为我的MainForm类的部分源文件。但是,新创建的部分类文件更改它的图标,看起来像一个表单。它应该坚持低于MainForm节点在解决方案资源管理器

为了形象化的问题:

Wrongly ordered partial class file

MainForm.ContextActions.cs文件内容如下:

namespace Interface_Group_Editor 
{ 
    public partial class MainForm 
    { 
     [...] 
    } 
} 

内容类似于MainForm.Designer.cs文件。然而.Designer.cs文件粘在MainForm.cs节点下,而.ContextActions.cs不支持!

我只处理MainForm.cs文件中绝对必要的表单事件,并在我从表单访问的外部类中拥有业务逻辑。但是,单独使用我的TreeView代码来维护和编辑表单需要大约500行代码,这些代码可以重新定位到新的部分源文件。这将有助于项目结构的整个可见性!

有没有办法强制这种行为解决方案资源管理器

+1

看看[文件嵌套扩展](https://visualstudiogallery.msdn.microsoft.com/3ebde8fb-26d8-4374-a0eb-1e4e2665070c)。我正在使用它来合并(手动嵌套)WPF视图+视图模型(类似于你想要在表单组内嵌入一些'cs'),这很漂亮。不知道*组嵌套的想法*如果罚款。另一个选择是在项目中为每个大组(包含项目和其他组)创建文件夹,但是这会添加一些愚蠢的命名空间问题(也可能修复),将文件夹名称添加到命名空间。 – Sinatr

+1

实际上提供了与下面的Hans Passant相同的答案的相关帖子是https://stackoverflow.com/questions/1478610/naming-conventions-for-partial-class-files –

回答

6

IDE不让你这样做,你必须用文本编辑器编辑.csproj文件。记事本会做。定位:

<Compile Include="MainForm.ContextActions.cs" /> 

和编辑到:

<Compile Include="MainForm.ContextActions.cs"> 
    <DependentUpon>MainForm.cs</DepedentUpon> 
</Compile> 

注意事项MainForm.Designer.cs入口看起来像这一点。请记住,此功能不经常测试,所以你可能会遇到一些怪癖。据了解,它运行良好,例如,当你移动它们时,你不会收到事件处理程序。删除事件处理程序是更棘手的情况,我注意到MainForm.cs文件被标记为已修改,即使它从未更改过。它不会像通常那样删除空的事件处理程序。因人而异。

继承是Winforms中的终极动力工具。例如,您可以轻松地从TreeView派生自己的类并将所有自定义代码移动到该类中。它不会不止一次使用。但也许有一天,你会:)

+1

我不想重复您的正确答案,但是在过去,我认为子文件夹是以一种违反直觉的方式处理的。也许你想添加一个这样的评论,类似于我在https://stackoverflow.com/questions/1478610/naming-conventions-for-partial-class-files –

+0

上说的太棒了!这个伎俩 – Vinzenz