2017-09-26 32 views
1

我返工建在VB6舊的應用程序,用VB.NET和Visual Studio 2005如何將文本框事件移動到其他文件 - VB6到VB.NET?

它有一個大的形式與像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 
+0

這與地球有什麼關係? – BugFinder

+0

@BugFinder刪除它:D – Vlad

+0

如果您只是想將代碼移動到不同的*文件*,那麼您可以在多個文件中定義部分類:https://docs.microsoft.com/en-us/dotnet/visual-basic /語言參考/調節劑/部分 – David

回答

2

劃分您的巨型類小零件最簡單的方法是通過使用Partial class

的概念只需創建一個新的類文件並將其命名爲大型表格類,但在兩個類之前都添加關鍵字部分。現在,你可以將你所有的事件處理程序的第二個文件,從這個東西釋放您的主要形式

請參閱MSDN上How to split a class into partial classes

在一個更加結構性解決方案,您可以檢查,如果它是不可能性,以創建一個獨特的事件處理程序相同的事件並強制您的控件使用相同的事件處理程序。

例如,如果在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..... 

或者,如果你覺得這個方法太'verbose',只需使用Winforms設計器爲所有控件選擇相同的事件處理函數

1

如果您發佈的示例代碼是指示性的,則可能有很多代碼僅用於瀏覽表單。

您可以通過正確設置標籤順序來刪除大部分內容。

對於特殊的導航鍵(例如向左方向鍵做一些特別的東西,或者你想要回車鍵移動到像TAB鍵下一個控件),嘗試設置Form.KeyPreview = True和具有外形寬KeyUp/KeyDown/KeyPress例程。

相關問題