2017-09-26 1 views
1

나는 VB.NET에 VB6에 내장 된 응용 프로그램 및 Visual Studio를 재 작업하고 2005텍스트 상자 이벤트를 다른 파일로 이동하는 방법 - VB6에서 VB.NET으로?

은 50 ~ 60 개 텍스트 상자 등으로 하나 개의 큰 형태, 2-3 이벤트 핸들러 각, 클릭를 keyDown 유효성 검사를 가지고 등등 ...

이 응용 프로그램을 만든 사람은 좋은 구조를 유지하기 위해주의를 기울이지 않았으므로 이제 양식의 코드 파일은 거의 2900 줄의 코드입니다.

중요한 기능이 3-4 개 있으며 다른 기능은 이벤트 처리기입니다.

문제는 각 이벤트 처리기가 비공개로 정의되어 있으며 양식 코드 파일에만 존재하는 개체/텍스트 상자를 참조한다는 것입니다.

이러한 이벤트 처리기를 개별 파일로 이동하는 올바른 방법은 무엇입니까?

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

지구상에서 무엇이 C#과 관련이 있습니까? – BugFinder

+0

@BugFinder가 제거했습니다 : D – Vlad

+0

코드를 다른 * 파일 *로 이동하려는 경우 여러 파일에 부분 클래스를 정의 할 수 있습니다. https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/수정 자/부분 – David

답변

2

작은 부품에 메가 클래스를 분할하는 가장 간단한 방법은 사용하는 것입니다 : 여기

내가 멍청한 놈 VB.NET 프로그래머입니다 때문에 별도의 파일로 이동하는 데 실패 샘플 코드 Partial class

그냥 새 클래스 파일을 만들고 큰 폼 클래스로 이름을 지정하지만 두 클래스 앞에 부분을 추가하십시오. 이에 대한 고유 한 이벤트 핸들러를 작성하는 possibile 경우 지금 당신은 당신이 확인할 수있는보다 구조적인 솔루션에 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

게시 한 샘플 코드가 표시되는 경우 많은 코드가 양식을 탐색하기위한 것일 수 있습니다.

탭 순서를 올바르게 설정하면 대부분을 제거 할 수 있습니다. 특별한 탐색 키 (예를 들어, 왼쪽 화살표 키를 특별한 무언가를, 또는 당신은 Tab 키와 같은 다음 컨트롤로 이동하려면 Enter 키를 원하는), Form.KeyPreview = True을 설정하고 양식 전체 KeyUp/KeyDown/KeyPress 루틴을 가지고 시도를 들어

.

관련 문제