我正在使用VB.NET和Visual Studio 2005重新编写VB6内置的旧应用程序。
它有一个大型表格,有50-60个文本框,每个文本框有2-3个事件处理程序,点击,验证,keydown,输入等......
构建此应用程序的人并没有注意保持良好的结构,所以现在表单的代码文件几乎是2900行代码。
它有3-4个重要的功能,其他功能只是事件处理程序。
问题是,每个事件处理程序都被定义为私有,并引用仅存在于表单代码文件中的对象/文本框。
将这些事件处理程序移动到单独文件的正确方法是什么?
这是一个示例代码,由于我是noob VB.NET程序员,我无法移动到单独的文件中:
Imports System.Windows.Forms
Public Class Pol
Private cboPol As MaskedTextBox = New MaskedTextBox()
Private Sub cboPol_Enter(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) 'Handles cboPol.Enter
' TODO ova beshe zakomentirano. Da se proveri
'meGodrag.SelStart = 0
' meGodrag.SelLength = 4
'grstar = meGodrag.Text
End Sub
Private Sub cboPol_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyEventArgs) 'Handles cboPol.KeyDown
Dim KeyCode As Short = eventArgs.KeyCode
Dim Shift As Short = eventArgs.KeyData \ &H10000
If KeyCode = Constants.LEFT_ARROW_KEY Then
'meNasmes.Focus()
End If
End Sub
Private Sub cboPol_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) 'Handles cboPol.KeyPress
Dim KeyAscii As Short = Asc(eventArgs.KeyChar)
'If KeyAscii = Constants.ENTER_KEY Then
System.Windows.Forms.SendKeys.Send(Constants.TAB_KEY)
'End If
eventArgs.KeyChar = Chr(KeyAscii)
If KeyAscii = 0 Then
eventArgs.Handled = True
End If
End Sub
End Class
答案 0 :(得分:2)
通过使用Partial class
的概念,将小型部分分成小部分的最简单方法是只需创建一个新的类文件并将其命名为大型表单类,但在两个类之前添加关键字部分。现在,您可以将所有事件处理程序移动到第二个文件,从而将主表单从这些内容中释放出来
请参阅How to split a class into partial classes
上的MSDN在更结构化的解决方案中,您可以检查是否可以为同一事件创建唯一的事件处理程序,并强制您的控件使用相同的事件处理程序。
例如,如果KeyDown事件的操作对于所有控件都相同,那么您可以编写单个事件处理程序并告诉控件使用它
Private Sub allControls_KeyDown(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyEventArgs)
Handles cboPol.KeyDown, cboXXXX.KeyDown, cboYYYY.KeyDown etc.....
或者,如果您发现此方法过于“冗长”,只需使用Winforms设计器为所有控件选择相同的事件处理程序
答案 1 :(得分:1)
如果您发布的示例代码是指示性的,则可能有很多代码仅用于导航表单。
您可以通过正确设置标签顺序来删除大部分内容。
对于特殊导航键(例如,左箭头键执行特殊操作,或者您希望ENTER键移动到下一个控件,如TAB键),请尝试设置Form.KeyPreview = True
并使用表单范围{{1} } / KeyUp
/ KeyDown
例程。