2014-09-25 3 views
0

첫째, VB.net에 대한 진정한 이해가 없지만 CAD 소프트웨어 MicroStation 용 VBA 프로그래밍을 수행했습니다. 나는 다른 프로그래머의 VB 코드를 상속 받았으며 많은 도움을줌으로써 몇 가지 변화를 만들었지 만 현재의 문제를 가지고 있습니다 ...양식 사용 후 계속하는 방법?

사용자가 프로그램을 다시 실행하려면 버튼을 클릭하거나 닫으려면 양식을 추가했습니다. 완전히 닫거나 파일을 닫고 만든 파일을 엽니 다. 처음 두 옵션은 작동하지만 마지막 명령은이 특정 Sub 내에서만 작동하는 명령을 사용하여 양식을 호출 한 후 계속 진행해야합니다. VBA에서는 If 문을 정의하여 건너 뛰지 않으면 'OpenFile'버튼을 클릭했는지 확인합니다. 그렇지만 VB에서는 알아 내지 못합니다. 필사적으로 나는 폼 버튼에 GOTO를 정의하려고 시도했지만 특정 서브 GOTO MakeFile (OpenFileHere)에 다시 연관시키는 방법을 모르겠다. 여기서 MakeFile은 sub이고 'OpenFileHere'는 라인 마커이다. 누구든지 내가해야 할 일을 제안하거나 프로세스를 따르기 위해 예를 들어 설명해 줄 수 있습니까?

Dim strFullName As String 
    If Right(Trim(strPath), 1) <> "\" Then 
     strPath = strPath & "\" 
    End If 
    strFullName = strPath + strName 
    If UCase(strFullName) = UCase(MSApp.ActiveWorkspace.ConfigurationVariableValue("_DGNFILE", True)) Then 
     MsgBox("Cannot Create file as this is the currently open file!", vbOKOnly, "File Create") 
     Exit Sub 
    End If 
    If MakeFolderPath(strPath) = True Then 

     If System.IO.File.Exists(strFullName) Then 
      If MsgBox("File Exists - Overwrite?", vbOKCancel, "File Create") = vbCancel Then 
       Exit Sub 
      End If 
     End If 

     System.IO.File.Copy(seed, strFullName, True) 

     '############################################################# 
     '### following line is used to open the newly created file ### 
     ' MSApp.CadInputQueue.SendCommand("newfile " + strFullName) 
     MakeAnother.Modal.Equals(True) 
     MakeAnother.Show() 

    End If 
OpenFileHere: 
    If MakeFile.OpenThisFile = "defined" Then 
     MsgBox("made it through") 
     MSApp.CadInputQueue.SendCommand("newfile " + strFullName) 
    End If 
+0

왜 두 개의 messagebox를 사용하지 않습니까? 그/그녀가 프로그램을 실행하기를 원한다면 먼저 질문하고, 대답이 "아니오"이면 파일을 여는 것에 대해 다시 묻습니다. –

+0

그럴 수는 있겠지만 약간은 어색해 보입니다. 나는 그것이 더 전문적으로 보이길 원합니다. 코드 끝에있는 msgbox는 단지 IF로 만든 것을 확인하기위한 디버깅을위한 것입니다. – mark

답변

1
이런 내가 프롬프트 형태로 사용하는 것이

, 뭔가 :

Public Class FPrompt 

Public Enum ExitState 
    Close 
    ContinueExec 
    OpenFile 
End Enum 

Private StateVariable As ExitState 



Public ReadOnly Property Response() 
    Get 
     Return StateVariable 
    End Get 

End Property 

Private Sub btnContinue_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnContinue.Click 
    Me.StateVariable = ExitState.ContinueExec 
    Me.Close() 
End Sub 


Private Sub btnExit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExit.Click 
    Me.StateVariable = ExitState.Close 
    Me.Close() 
End Sub 

Private Sub btnOpenfile_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOpenfile.Click 
    Me.StateVariable = ExitState.OpenFile 
    Me.Close() 
End Sub 

End Class 
다음은 내가 'MakeAnother'로 해결하려고 노력하고있는 부분은 내 양식과 '메이크'아래의 하위입니다입니다

그리고 formclosing 이벤트에서 (주요 하위 함수에서) 응답 속성을 검색하고 원하는 것을 수행하십시오.

[업데이트]

Friend WithEvents objX As FPrompt 

Sub Main() 

    objX = New FPrompt 
    objX.ShowDialog() 
    If objX.Response = FPrompt.ExitState.Close Then 
    ElseIf objX.Response = FPrompt.ExitState.ContinueExec Then 
    ElseIf objX.Response = FPrompt.ExitState.OpenFile Then 
    End If 

End Sub 

는 도움이되기를 바랍니다.

+0

+1 나를 때리는 것. 그러나 op를 보여주는 코드를 다른 양식에서 호출하는 방법을 포함 할 수 있습니다. – Steve

+0

@ 스 티브 감사합니다, 내가 그랬어. (테스트되지 않음) –

+0

감사합니다 Aldipa, 당신이 뭘했는지 (VB 언어가 부족한) 따라갈 시간이 조금 걸렸지 만 거기에 왔습니다. 내 특정 시나리오에 대한 약간의 조정을 나는 그것이 치료 작업이 있습니다 MakeAnother 으로'희미한 objX을 objX = 새 MakeAnother objX.ShowDialog() 만약 objX.Response = MakeAnother.ExitState.Close 그런 의 ElseIf objX.Response = MakeAnother.ExitState.ContinueExec 그런 의 ElseIf objX.Response = MakeAnother.ExitState.OpenFile 그런 MSApp.CadInputQueue.SendCommand ("이를 새"+ strFullName) CreateDrawing.Close() 큰 @ 마크의 끝 If' – mark

관련 문제