2017-02-19 8 views
0

Windows Forms 응용 프로그램을 VB에서 C#으로 변환하고 있습니다.Re-Containing MDIchild forms

즉, 폼이 전달되는 두 번 클릭하는 동안 발생하는 formLocation() 클래스의 메서드가 있고 MainForm의 MDIChild로 폼을 다시 설정할 수 있습니다. 어떤 이유로이 VB 코드는 C#으로 변환되지 않습니다. 자식 폼이 MainForm의 현재 인스턴스에 들어가야하기 때문에 이상하지 않은 MainForm의 새로운 인스턴스를 만들어야합니다. 여기 VB 코드는 다음과 같습니다 기본적으로 난 그냥 C#을 동등한 필요합니다

Public Sub contain(ByVal form As Form) 
    With form 
     .MdiParent = MainForm 
    End With 
End Sub 
+1

인스턴스로 이동해야하는 경우 MainForm의 인스턴스를 메소드에 전달하십시오 ... 문제점이 무엇인지 알 수 없습니다. 따라서 MainForm이 무엇인지 알지 못하기 때문에 새로운 인스턴스를 만드는 것이 왜 필요합니까? – Codexer

+0

VB.NET의 두려운 기본 인스턴스 기능을 해제하는 데는 어느 정도 시간이 걸릴 것입니다. 가장 간단한 해결 방법은 form.MdiParent = Application.OpenForms [0]; –

답변

0

VB는 역사적으로 많은 혼란을 발생했습니다 폼 클래스와 동일한 이름으로 액세스되는 형태의 기본 인스턴스를 생성 - 모든 몇 줄의 코드를 저장한다는 이름으로 지금

private static MainForm _DefaultInstance; 
public static MainForm DefaultInstance 
{ 
    get 
    { 
     if (_DefaultInstance == null) 
      _DefaultInstance = new MainForm(); 

     return _DefaultInstance; 
    } 
} 

에 코드를 변경 : 당신의 'MainForm'클래스에서

, 다음을 삽입

form.MdiParent = MainForm.DefaultInstance; 

이 VB 당신을 위해 무엇을 재현 할 수있는 가장 가까운 방법은,하지만, 궁극적으로 양식을 인스턴스화하는보다 표준적인 방법으로 이동해야합니다.

VB에서 C#으로 변환하면 VB에서 프로그래머의 세부 정보를 숨기려는 의도로 인해 프로그래밍 개념 (예 : 인스턴스 유형)에 대한 기본적인 이해가 불가능한 경우가 많이 있습니다.

+0

그리고 예! 나는 VB의 "좋은 의도"가 내게 두통을 일으키는 "끝이없는"상황에 직면했다. – Matt

+0

정말 고마워요! 그게 많이 설명해! 그러나 이것은 오류가 아니지만 양식은 mainForm으로 돌아 가지 않습니다. mdiparent = null을 더블 클릭해도 기본 폼으로 다시 설정되지 않습니다. – Matt

+0

@Matt 위의 내 코멘트에서 언급 한 주 폼 인스턴스에 대한 참조가 필요하기 때문입니다. 새 코드를 만들면 도움이되지 않을 것입니다. – Codexer