Unvollständige Anzeige des Entwurfs von Form bei Projektentwicklung (friert ein)

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Unvollständige Anzeige des Entwurfs von Form bei Projektentwicklung (friert ein)

    Ich habe unter VB2010 eine (einigermaßen) komplexe Form (Fenster) entworfen. Die Arbeitsfläche in VB ist vertikal zweigeteilt. Links der Fensterentwurf, rechts der Code. Während des Codierens und Testens verändert sich der Fensterentwurf so, dass nur noch wenige Konturen angezeigt werden. Die Anzeige lässt sich nur wieder auffrischen, wenn der Entwurf mit Klick auf "X" geschlossen und anschließend aus dem Projektmappen-Explorer wieder neu geöffnet wird. Die Verfremdung tritt nicht während einer Manipulation am graphischen Entwurf ein, denn der ist sogar gesperrt. Die Sache ist sehr lästig, denn ich benutze oft den grafischen Entwurf, um mit Doppelklick auf das Steuerelement zur Anzeige einer Ereignisprozedur zu kommen.
    Kann es sein, dass Du sehr viel Code in Deiner Form_Load drin hast?
    Die wirde jedesmal aufgerufen, wenn die Form neu gezeichnet wird.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie misst man "Viel" Code? Es sind 180 Quellzeilen. Dazwischen aber Leerzeilen und Fortsetzungszeilen.

    Der "Gedächtnisverlust" tritt scheinbar immer dann auf, wenn ich aus der Bearbeitung des Quelltextes das Debbuging starte (F5), also der Quelltext aktiv ist. Wenn dagegen zuletzt der Fensterentwurf aktiv ist, scheint der Effekt nicht aufzutreten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „drschef“ ()

    Hast Du UserControls und solch auf Deiner Form?
    Kannst Du mal ein Bild davon posten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die schnelle Reaktion. Ich habe zwei Bilder (vorher und nachher) aufbereitet. Hier sind sie. Bitte nochmal meinen vorigen Text ("Gedächtnisverlust") beachten. Ich hatte ihn nochmal etwas ergänzt. User-Controls verwende ich. Bei dieser Gelegenheit eine ganz andere Frage: Weiß jemand, wie man die dynamisch expandierenden Bilder einbindet, die zunächst "mini" angezeigt werden und sich dann "fliegend" aufzoomen?

    drschef schrieb:

    und sich dann "fliegend" aufzoomen?
    Das klingt doch sehr nach WPF, mit WinForms ist das ein elender Krampf.
    Ein "Einschlafen" habe ich schon erlebt, wenn ein UserControl aufgerufen wird, in dem ein weiteres UserControl eingebettet ist und in dessen New()-Routine (nicht Form_Load) wurden Datenbankzugriffe getätigt.
    Das kannst Du so abtesten:

    VB.NET-Quellcode

    1. If Not Me.DesignMode Then
    2. ' hier das tun, was für den Designmode nicht erforderlich ist
    3. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Missverständnisse

    Das Aufzoomen hatte nichts mit dem VB-Entwurf zu tun, sondern mit diesem Forum. Da habe ich verschiedentlich Grafiken gesehen, die als Thumbnail dargestellt waren und beim Anklicken aufzoomen. Hätte sich bei der Anzeige der beiden oben eingefügten Grafiken gut gemacht und dient der Übersichtlichkeit des Beitrags besser als das Expandieren.

    Das Folgende habe ich leider nicht verstanden. Vielleicht lässt sich das noch etwas untersetzen:

    Quellcode

    1. If Not Me.DesignMode Then
    2. ' hier das tun, was für den Designmode nicht erforderlich ist
    3. End If
    Der Konstruktor New() einer Form und von beliebigen Controls wird sowohl während der Design-Zeit als auch während der Laufzeit ausgeführt.
    Wenn während der Darstellung der Form im Designer iwas anderes, für den designer an sich unwichtiges aber zeitaufwändiges getan wird, z.B. eine Datenbank auslesen, kann das unterdrückt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube, das wars. Ich habe das Kommando etwas anders notiert. Es steht jetzt in folgender Form am Anfang der Load-Prozedur:

    Quellcode

    1. If Me.DesignMode Then Exit Sub


    Damit wird das Fenster im Designmode (bis jetzt) vollständig aufgebaut. Was auch immer im Detail die konkrete Ursache war (zu viel Befehle in der Load-Prozedur, oder User-Control oder Datenbank-Load ...). Ich beobachte mal noch eine Weile und werde dann im positiven Fall mit einem letzten Statement das Thema schließen.

    Danke erst mal für die Hilfe
    Vielleicht noch zur Information:
    Die InitializeComponents()-Prozedur, die in New() aufgerufen wird, legt die gesamte GUI an und bereitet sie zur Darstellung vor.
    Im Run-Modus wird die Form dann unmittelbar nach Form_Load() sichtbar, im Designer iwann nach New(), da wird die Form_Load() nicht aufgerufen.
    Wenn da UserControls und solch in Deiner GUI enthalten sind, haben die ihrerseits eine eigene InitializeComponents()-Prozedur, die in deren New() aufgerufen wird.
    Wenn es da iwo klemmt, dann klemmt es halt...
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!