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
Antwort
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.
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
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
@KonradRudolph Es ruft auch '_Initialize' beim Kompilieren des Projekts. – Deanna
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.
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
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
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
- 1. Verschieben eines Benutzersteuerelements innerhalb eines anderen Benutzersteuerelements
- 2. Wie trigger ich das Klickereignis eines Benutzersteuerelements?
- 3. Welches ist das beste Formularereignis zum dynamischen Laden eines Benutzersteuerelements?
- 4. Expose Eigenschaften eines verschachtelten Benutzersteuerelements
- 5. Aufruf initialisieren beim Laden eines mit YAML serialisierten Objekts
- 6. Programmgesteuertes Laden eines Benutzersteuerelements aus einem anderen Projekt
- 7. Verwenden eines Benutzersteuerelements in einer Basisseitenklasse
- 8. Rendern eines Benutzersteuerelements auf eine Zeichenfolge
- 9. Können Sie mehrere VaryByCustom-Parameter beim Zwischenspeichern eines Benutzersteuerelements verwenden?
- 10. Wird der Destruktor beim Delegieren eines delegierenden Konstruktors aufgerufen?
- 11. Ajax Popupextender zum Anzeigen eines Benutzersteuerelements?
- 12. Hinzufügen eines Benutzersteuerelements mit Windows Form Designer
- 13. Segmentierungsfehler beim Laden eines GeoJsons
- 14. Programmgesteuertes Andocken eines Benutzersteuerelements zur Laufzeit
- 15. Wie erhalte ich den Instanznamen eines Benutzersteuerelements?
- 16. Methode beim Ablehnen eines UIViewController aufgerufen?
- 17. WPF-Lernprogramm zum Erstellen eines benutzerdefinierten Benutzersteuerelements
- 18. Abrufen eines Benutzersteuerelements zum Füllen seines Containers
- 19. WPF: Hinzufügen eines Benutzersteuerelements zu einem Fenster
- 20. Hinzufügen eines Benutzersteuerelements zu einem wpf-Fenster
- 21. Wie abonniere ich ein Ereignis eines Benutzersteuerelements
- 22. Dynamische Auswahl eines Asp.Net MVC-Benutzersteuerelements
- 23. Sammlung Editor innerhalb eines Benutzersteuerelements zur Entwurfszeit
- 24. Verwenden von Page.IsPostback innerhalb eines Benutzersteuerelements in einem Aktualisierungsbereich
- 25. Laden eines Webfragments beim Ausführen eines eingebetteten Jettys
- 26. input == null beim Laden eines Bildes
- 27. Fehler beim Laden eines persistenten Arbeitsablaufs
- 28. Fehler beim Laden eines Pakets in Rstudio
- 29. Verhindern doppelte Anfrage beim Laden eines Hintergrundbilds
- 30. So stellen Sie den Datenkontext eines Benutzersteuerelements ein
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