我想为我的表单创建一个部分类。我有很多事件,而且变得很混乱,所以我想将各个部分分成自己的文件。
问题:当我创建表单的部分类时,说:
Partial Public Class Form1
End Class
Visual Studio 决定我需要另一种形式来表示这个部分类。
问题:
1. 如何为表单创建分部类?
2. 如果我做不到这一点,我怎样才能将表单中的所有事件分解到不同的文件中?
是的,确实如此。一旦您将控件放在该虚拟窗体上,您就会获得生成到该源代码文件中的设计时代码 (InitializeComponent)。这是 .NET 1.x 的兼容性行为,它不支持 Partial 关键字。这会破坏构建,现在有两个。通过小心点击,这在某种程度上是可以避免的,但你知道它迟早会发生。
顺便说一句,其他事情也会出错,当您将事件处理程序从一个文件移动到另一个文件时,设计器无法再跟踪事件处理程序。并且很容易让您添加另一个更棘手的错误来源。
这不太有效,放弃依靠它来解决你的问题的希望。
一般的诊断是复杂的用户界面会产生复杂的代码。但毫无疑问,那艘船已经航行了。更结构化的解决方案是采用 MVC 模型,将数据与数据视图分离。您仍然会有很多事件处理程序,但它们除了调用执行实际工作的类的方法之外不会执行任何其他操作。其源代码当然可以存在于另一个源代码文件中。典型的问题是 Windows 窗体对此没有任何内置支持,您必须手动制作它。与 WPF 中的 MVVM 模型没有任何相似之处。
可以很好地工作的事情是将控件+代码隔离到单独的用户控件中。不过,您必须小心行事,您不想添加一堆公开内部控件的属性和事件。
给定 .NET 类型的所有分部类当然必须在同一命名空间中声明(无论它们存储在什么文件中)。
我注意到,当我创建一个 Form Partial 类时,图标从类图标变成了表单图标。与 Main.designer.vb 文件关联的图标看起来像带有箭头的类图标。
Public Class Main 'saved in Form1.vb
VS 将设计器中的名称更新为:
Partial Class Main 'saved in Form1.Designer.vb
然后我创建了另一个同名的“部分类”:
Partial Class Main 'saved in Main.vb
无论我是编辑 Form1.vb 还是 Main.vb,VS 都会在顶部导航面板上显示所有例程、函数、子程序,甚至后台工作人员和计时器。对于事件处理程序,为了避免前面提到的漏洞(您在布局设计器中单击一个控件,将在原始 Form1.vb 中创建一个全新的事件处理程序)我:
Partial Public Class Main 'in Form1.vb file
Private Sub SomeControl_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SomeControl.Click
Call SomeControlClick(sender, e)
End Sub
End Class
Partial Public Class Main 'then in Main.vb file
Private Sub SomeControlClick(ByVal sender As Object, ByVal e As System.EventArgs)
'blah blah
End Sub
End Class