使用: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表单?
或者我是否必须将它分成不同的类?
感谢。
答案 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,那么您应该是金色的。
修改:另外,考虑到主表单的大小,您可能需要考虑重构。请考虑遵循MVC或MVP模式。将您的问题分成单独的类,甚至可能是模块。
答案 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 下。