【问题标题】:Add partial form class below windows form node在 windows 窗体节点下添加部分窗体类
【发布时间】:2016-10-21 18:07:23
【问题描述】:

我目前面临的问题是我的主要Form.cs 文件越来越大,我想将其拆分为几个部分文件。这些应粘贴在 Visual Studio 解决方案资源管理器中的主窗体 (MainForm.cs) 节点下方。

我尝试创建新的类文件并将其声明为我的MainForm 类的部分源文件。然而,新创建的部分类文件改变了它的图标,看起来像一个表格。相反,它应该在Solution Explorer低于MainForm 节点。

可视化问题:

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

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

内容类似于MainForm.Designer.cs文件。但是.Designer.cs 文件会粘贴在MainForm.cs 节点下方,而.ContextActions.cs 不会!

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

有什么方法可以强制解决方案资源管理器执行此行为?

【问题讨论】:

  • 看看File Nesting extension。我正在使用它来组合(手动嵌套)WPF 视图 + 视图模型(类似于您想在表单组中嵌套一些 cs 的方式),它很漂亮。不确定组嵌套的想法是否可以。另一种选择是在项目中为每个大组(包含项目和其他组)创建文件夹,但这会添加一些愚蠢的命名空间问题(也许也可以修复),将文件夹名称添加到命名空间。
  • 一个与下面的 Hans Passant 提供相同答案的相关帖子是stackoverflow.com/questions/1478610/…

标签: c# winforms


【解决方案1】:

IDE 不允许您这样做,您必须使用文本编辑器编辑 .csproj 文件。记事本就可以了。定位:

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

并编辑为:

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

注意 MainForm.Designer.cs 的条目也是这样的。请记住,此功能不会经常进行测试,因此您可能会遇到一些怪癖。据了解它运作良好,例如,当您移动它们时,您不会将事件处理程序取回。删除事件处理程序是一个更棘手的场景,我注意到 MainForm.cs 文件被标记为已修改,即使它从未更改过。而且它不会像通常那样删除空的事件处理程序。 YMMV。

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

【讨论】:

  • 我不想复制你的正确答案,但过去我觉得子文件夹是用一种违反直觉的方式处理的。或许你想对此加个评论,类似于我在stackoverflow.com/questions/1478610/… 上所说的
【解决方案2】:

我不确定我是否真的想这样做,但是它以某种方式工作,用于分离表单代码以执行一些业务逻辑(或其他)代码,就像这篇文章试图做的那样。 我不喜欢它在打开文件时打开了一个空表单设计器。

如果您使用 Hans 解决方案,但将文件名更改为 MainForm.SomeExtensionClassYouWant.Designer.cs,则双击该文件时不再打开 false Designer。

即:以.Designer.cs(或.vb)结尾时必须有一些代码才能在代码中打开,而不是误导设计者。

在 C# 和 VB.Net 的 VS 2017 中测试

EG:

<Compile Include="Form1.IncludedPartial.Designer.cs">
  <DependentUpon>Form1.cs</DepedentUpon>
</Compile>

【讨论】:

  • 警告:虽然这有点小技巧 - 在 Visual Studio 中加载时重命名表单文件失败并出现错误。可能最好避免这种事情。
猜你喜欢
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
相关资源
最近更新 更多