2017-02-19 2 views
0

Ich konvertiere eine Windows Forms-Anwendung von VB nach C#.Re-Containing MDIchild Formulare

Kurz gesagt, ich habe eine Methode in einer formLocation() - Klasse, in der ein Formular übergeben wird (feuert während Doppelklick) und das Formular kann als MDIChild von MainForm zurückgesetzt werden. Aus irgendeinem Grund wird dieser VB-Code nicht in C# übersetzt. Es zwingt mich, eine neue Instanz von MainForm zu erstellen, die nicht ideal ist, weil das untergeordnete Formular in die aktuelle Instanz von MainForm gehen muss. Hier ist der Code VB: Im Grunde brauche ich nur das C# -Äquivalent:

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

Wenn es in die Instanz gehen muss, dann übergeben Sie die Instanz von MainForm an die Methode ... Ich sehe nicht, was das Problem ist. Aus diesem Grund müssen Sie eine neue Instanz erstellen, weil sie nicht wissen, was MainForm ist ... – Codexer

+0

Das Verlernen der gefürchteten Standardinstanz-Funktion von VB.NET wird eine Weile dauern. Die einfachste Problemumgehung ist form.MdiParent = Application.OpenForms [0]; –

Antwort

0

VB erstellt eine Standardinstanz von Formen, die durch die gleichen Namen wie die Formularklasse zugegriffen wird, die in der Vergangenheit eine Menge Verwirrung verursacht hat - alle im Namen des Speicherns ein paar Zeilen Code.

In Ihrem Mainform "Klasse, legen Sie die folgenden Schritte aus:

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

     return _DefaultInstance; 
    } 
} 

Nun ändern Sie Ihren Code:

form.MdiParent = MainForm.DefaultInstance; 

Dies ist der nächste Weg zu reproduzieren, was VB für Sie tut, aber Sie sollten schließlich zu einer standardmäßigen Form der Instanziierung Ihrer Formulare übergehen.

Wenn Sie VB in C# konvertieren, werden Sie auf viele andere Fälle stoßen, in denen VBs Absicht, Details vor Programmierern zu verbergen, das grundlegende Verständnis von Programmierkonzepten (wie Instanz vs. Typ) verhindert hat.

+0

Und ja! Ich habe "endlose" Situationen erlebt, in denen die "guten Absichten" von VB mir Kopfschmerzen bereiten. – Matt

+0

Vielen Dank! Das erklärt einiges! Dies ist jedoch kein Fehler, aber das Formular kehrt nicht zu mainForm zurück. Doppelklick, wenn sein mdiparent = null setzt es nicht zurück zum Hauptformular – Matt

+0

@Matt Das ist, weil Sie einen Verweis auf dieses Hauptformular Instanz benötigen, wie in meinen Kommentaren oben erwähnt. Das Erstellen eines neuen wird nicht helfen, da es nicht die Instanz ist, nach der Sie suchen ... – Codexer