2009-05-12 7 views
4

Wenn wir ein VB-Projekt laden, ruft es das Ereignis Initialize eines Benutzersteuerelements auf (falls im Projekt vorhanden). Mein Problem ist, dass ich einen Code in UserControl_Initialize habe, der versuchen wird, Instanzen anderer COM-Objekte zu erstellen. Auf meinem Computer sind diese Steuerelemente nicht registriert. Eine Möglichkeit ist, den Code auf eine andere Methode als Initialize zu verschieben, aber ich möchte wissen, ob es eine bessere Lösung gibt? Irgendwo habe ich gefunden, dass wir überprüfen können, ob die aufrufende Anwendung VB-Editor ist und dann den Initialisierungscode überspringt ...VB6.0: Initialisierungsmethode eines Benutzersteuerelements, das beim Laden eines VB-Projekts aufgerufen wird

+1

Haben Sie eine Code-Lösung gefunden? Es ruft auch Initialize während der Kompilierung auf, wodurch alle Arten von unerwünschtem Code ausgeführt werden. – Deanna

Antwort

1

Dies geschieht nur, wenn Ihr Projekt mit dem geöffneten Formular-Designer gespeichert wurde: dies bedeutet, dass beim Start der Formular wird angezeigt (vielleicht im Hintergrund) und folglich müssen alle Steuerelemente darauf initialisiert werden. Daher wird Ihr Benutzersteuerungsinitialisierer aufgerufen, wenn dieses Steuerelement auf dem Formular verwendet wird.

Um dies zu verhindern, speichern Sie das Projekt einfach mit geschlossenem Formulardesigner.

+1

Yup Sie haben Recht. Aber mein Problem ist, dass ich nicht sicherstellen kann, dass jeder meiner Entwickler prüft die Projektdatei mit dem Designer geschlossen :( – Paragon

+0

Der offene Zustand des Formulars ist in der .vbw-Datei in Ihrem Arbeitsordner gespeichert. Stellen Sie sicher, dass dies nicht ist In der Quellcodeverwaltung, und machen Sie es leer und Readonly, um alles zu erzwingen, geschlossen, wenn Sie das Projekt laden. – Deanna

+1

@KonradRudolph Es ruft auch '_Initialize' beim Kompilieren des Projekts. – Deanna

5

können Sie verwenden:

If Not Me.DesignMode Then 
    ... 
End If 

Eine andere Lösung, die wir verwenden, um eine kleine Funktion war die weltweit verwendet werden kann:

Public Function IsRuntime() as Boolean 
    On Error Goto NotRuntime 
    Debug.Print(1/0) 
    IsRuntime = True 
    Exit Function 
NotRuntime: 
    IsRuntime = False 
End If 

Weiß nicht, ob es syntaktisch gut ausgebildet, aber die Idee sollte klar sein: Nur in der IDE wird die Debug-Anweisung aufgerufen.

+0

Danke H-Man2 :). Die zweite Lösung ist großartig. Wie für die erste Lösung Me.DesignMode ist keine Option in VB6, vielleicht wurde es in VB.NET eingeführt – Paragon

+4

Die erste Lösung sollte If Not Ambient.UserMode für VB6 sein. Zum Beispiel http://msdn.microsoft.com/en-us/library/aa241637(VS.60).aspx – MarkJ

+2

Beachten Sie, dass die beiden Lösungen etwas anderes Verhalten haben. Die erste Lösung schaltet den Code immer aus, wenn sich das Steuerelement im Entwurfsmodus befindet (macht nur einen Unterschied, wenn Sie Ihr Steuerelement in einem OCX erstellen). Die zweite Lösung schaltet den Code immer aus, wenn er von der IDE ausgeführt wird, entweder im Entwurfsmodus * oder im Ausführungsmodus *. Möglicherweise wird das Steuerelement beim Ausführen von der IDE zum Testen des Laufzeitverhaltens ordnungsgemäß beendet. – MarkJ

Verwandte Themen