Wie erkennt man, ob .NET-Code vom Visual Studio-Designer ausgeführt wird
Ich erhalte einige Fehler geworfen in meinem code, wenn ich öffnen Sie ein Windows Forms-Formular in Visual Studio-designer. Ich möchte-Zweig in meinem code, und führen Sie eine unterschiedliche Initialisierung, wenn das Formular geöffnet wird, durch die designer, als wenn es ausgeführt wird, wirklich.
Wie kann ich bestimmen, zur Laufzeit, wenn der code ausgeführt wird, der als Teil der designer öffnen der form?
InformationsquelleAutor der Frage Zvi | 2008-09-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie heraus, ob Sie im "design-Modus":
InformationsquelleAutor der Antwort Roger Lipscombe
InformationsquelleAutor der Antwort NET3
Die Kontrolle.DesignMode-Eigenschaft ist wahrscheinlich das, was du bist suchen für. Es sagt Ihnen, wenn die Kontrolle der Eltern ist im designer öffnen.
In den meisten Fällen funktioniert es Super, aber es gibt Fälle, wo es nicht funktioniert wie erwartet. Erstens, es funktioniert nicht in der controls-Konstruktor. Zweite, DesignMode ist false für "Enkel" - Steuerelemente. Zum Beispiel, DesignMode auf Steuerelemente gehostet werden, in einem UserControl wird false zurück, wenn das Benutzersteuerelement wird gehostet in einem übergeordneten.
Es ist eine ziemlich einfache Abhilfe. Es geht so etwas wie dieses:
Habe ich noch nicht getestet, der code, aber es sollte Arbeit.
InformationsquelleAutor der Antwort JohnV
Den zuverlässigsten Ansatz ist:
InformationsquelleAutor der Antwort GWLlosa
Der zuverlässigste Weg, dies zu tun ist, zu ignorieren, die DesignMode-Eigenschaft und verwenden Sie Ihre eigene Flagge, die festgelegt wird, auf Anwendung startup.
Klasse:
Programm.cs:
Dann prüfen Sie einfach die Flagge whever Sie es brauchen.
InformationsquelleAutor der Antwort Marty Dill
Die devenv Ansatz aufgehört zu arbeiten in VS2012, wie der designer nun in einem eigenen Prozess. Hier ist die Lösung, die ich bin derzeit mit ("devenv" - Teil ist Links gibt es für ältere, aber ohne VS2010 ich bin nicht in der Lage zu testen, obwohl).
InformationsquelleAutor der Antwort Johny Skovdal
Ich hatte das gleiche problem in Visual Studio Express 2013. Ich habe versucht, viele der Lösungen, die hier vorgeschlagen werden, aber die, die für mich gearbeitet wurde eine Antwort auf einen anderen threaddie ich wiederhole, hier sollte der link ist immer gebrochen:
InformationsquelleAutor der Antwort GeeC
Ich habe versucht den obigen code (Hinzugefügt eine using-Anweisung), und dieses Versagen ist in einigen Fällen für mich. Die Prüfung im Konstruktor ein usercontrol direkt in ein Formular mit dem designer-laden beim Start. Aber würde die Arbeit an anderen stellen.
Was für mich gearbeitet, in allen Orten ist:
Vielleicht ein bisschen overkill, aber es funktioniert, also ist das gut genug für mich.
Den Erfolg im Beispiel oben ist die bModeCheck, also wahrscheinlich die DesignMode-ist-überschuss.
InformationsquelleAutor der Antwort Martin
InformationsquelleAutor der Antwort pintergabor
Es ist hack-ish, aber wenn Sie VB.NET und wenn man läuft innerhalb von Visual Studio Meine.- Anwendung.- Bereitstellung.CurrentDeployment wird Nichts sein, weil Sie noch nicht implementiert es noch nicht. Ich bin mir nicht sicher, wie Sie Sie zu prüfen, den entsprechenden Wert in C#.
InformationsquelleAutor der Antwort Joel Coehoorn
Verwenden wir den folgenden code in Benutzersteuerelemente und es funktioniert. Mit nur DesignMode funktioniert nicht in der app, nutzt Ihre benutzerdefinierten Steuerelemente wie bereits von anderen Mitgliedern.
InformationsquelleAutor der Antwort
Überprüfen Sie die
DesignMode
- Eigenschaft des Steuerelements:Beachten Sie, dass dies nicht funktioniert, in den Konstruktor, weil die Komponenten noch nicht initialisiert wurde, noch.
InformationsquelleAutor der Antwort Ryan Steckler
InformationsquelleAutor der Antwort ShuggyCoUk
InformationsquelleAutor der Antwort Bob King
Beim ausführen eines Projekts, dessen Namen angefügt ".vshost".
So, ich benutze diese:
Es funktioniert für mich.
InformationsquelleAutor der Antwort Andy
Ich bin mir nicht sicher, ob laufen im debug-Modus zählt als real, aber ein einfacher Weg ist, um ein
if
- Anweisung in Ihrem code, dass checkes fürSystem.Diagnostics.Debugger.IsAttached
.InformationsquelleAutor der Antwort Adrian Anttila
Wenn Sie eine Eigenschaft, die Sie nicht brauchen, überhaupt zur design-Zeit können Sie die DesignerSerializationVisibility Attribut aus und legen Sie es Verborgen. Zum Beispiel:
Es wurde mir von Visual Studio abstürzt, jedes mal, wenn ich eine änderung in der form mit
NotImplementedException()
und versuchte zu retten. Stattdessen Visual Studio weiß, dass ich nicht serialisieren möchten diese Eigenschaft, so kann es überspringen. Es zeigt nur einige seltsame Zeichenfolge in das Dialogfeld Eigenschaften des Formulars, aber es scheint sicher zu sein, Sie zu ignorieren.Bitte beachten Sie, dass diese änderung nicht wirksam, bis Sie wieder aufzubauen.
InformationsquelleAutor der Antwort Bolek
Wenn Sie in einem Formular oder Steuerelement, das Sie verwenden können, die DesignMode-Eigenschaft:
InformationsquelleAutor der Antwort Akselsson
Fand ich die DesignMode-Eigenschaft buggy sein, zumindest in früheren Versionen von Visual Studio. Daher habe ich meinen eigenen gemacht mit der folgenden Logik:
Art von einem hack, ich weiß, aber es funktioniert gut.
InformationsquelleAutor der Antwort Eyvind
Das problem zu lösen, können Sie auch code, wie unten:
InformationsquelleAutor der Antwort Ali Reza Kalantar
Hier ist noch eins:
InformationsquelleAutor der Antwort John Peters
Nach der Prüfung die meisten der Antworten hier, leider nichts für mich gearbeitet (VS2015).
Also habe ich ein wenig verdrehen, um JohnV Antwort, das hat nicht funktioniert out of the box, da DesignMode ist eine geschützte Eigenschaft der Control-Klasse.
Zuerst machte ich eine extension-Methode, die zurückgibt, die DesignMode-Eigenschaft den Wert per Reflection:
und dann machte ich eine Funktion wie JohnV:
Dies ist die einzige Methode, die für mich gearbeitet, ohne all den "ProcessName" Durcheinander, und während die Reflexion sollte nicht leichtfertig angewendet werden, in diesem Fall haben alle den Unterschied! 😉
EDIT:
Können Sie auch die zweite Funktion eine Erweiterung Methode wie diese:
InformationsquelleAutor der Antwort Gpower2
InformationsquelleAutor der Antwort Lozza
Hier ist eine flexibel anpassbare, wo Sie kompilieren, als auch, ob oder nicht Sie kümmern sich, in welchem Modus Sie sich befinden.
InformationsquelleAutor der Antwort Gary