【问题标题】:How to move textbox events to other file - VB6 to VB.NET?如何将文本框事件移动到其他文件 - VB6 到 VB.NET?
【发布时间】:2017-09-26 13:16:39
【问题描述】:

我正在使用 VB.NET 和 Visual Studio 2005 重新构建在 VB6 中构建的旧应用程序。

它有一个包含 50-60 个文本框的大表单,每个文本框有 2-3 个事件处理程序、单击、验证、keydown、输入等...

构建这个应用程序的人没有注意保持良好的结构,所以现在表单的代码文件几乎是 2900 行代码。

它有 3-4 个重要功能,其他功能只是事件处理程序。

问题是,这些事件处理程序中的每一个都被定义为私有的,并且引用仅存在于表单代码文件中的对象/文本框。

将这些事件处理程序移动到单独的文件中的正确方法是什么?

这是一个示例代码,由于我是新手 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

【问题讨论】:

标签: vb.net vb6 visual-studio-2005 upgrade


【解决方案1】:

将超大类分成小部分的最简单方法是使用Partial class 的概念

只需创建一个新的类文件并将其命名为您的大表单类,但在两个类之前添加关键字Partial。现在您可以将所有事件处理程序移动到第二个文件中,从而将您的主窗体从这些东西中释放出来

请参阅 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 设计器为所有控件选择相同的事件处理程序

【讨论】:

    【解决方案2】:

    如果您发布的示例代码是指示性的,则可能很多代码只是用于导航表单。

    您可以通过正确设置标签顺序来删除大部分内容。

    对于特殊的导航键(例如,左箭头键有特殊的作用,或者您希望 ENTER 键移动到下一个控件,如 TAB 键),尝试设置 Form.KeyPreview = True 并在表单范围内设置 KeyUp/@987654323 @/KeyPress 例程。

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多