vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Problem mit Formxy.shown 
Autor: Kuno60
Datum: 10.03.15 16:19

Hallo,

das Shown Ereignis wird nur dann nicht ausgelöst, wenn im Load Ereignis ein Fehler aufgetreten ist.
Wenn du das Projekt mit Debugger startest, wird bei einem Fehler im Load Ereignis, das Programm nicht unterbrochen. Fehler werden nur im Ausgabefenster angezeigt. Nachfolgender Code wird nicht ausgeführt und auch das Shown Ereignis wird nicht ausgelöst. Wenn du es ohne Debugger startest, wird das Programm unterbrochen und der Fehler gemeldet.

Die Ursache für einen Fehler kann eine öffentliche Variable sein, die bereits verwurfen wurde.

Beim Öffnen einer Form mit Show oder ShowDialog wird zuerst eine Instanz der Form erstellt, die Sub New durchlaufen, die Steuerelemente erstellt, dann das Load Ereignis aufgerufen und dann das Shown Ereignis.

Wird die Form geschlossen, mit Close oder durch Klick auf das Schließsymbol, so wird die Instanz der Form verworfen, ebenfalls alle Steuerelemente und alle öffentlichen Variablen.
Wird die Form nur ausgeblendet mit Visible=False oder Hide() so bleibt alles erhalten.

Angenommen Form2 beinhaltet diesen Code:
Public Class Form2
 
  Public frm As Form
 
  Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.Label1.Text = frm.Text
  End Sub
 
End Class
Das Label zeigt den Titeltext der übergebenen Form (frm) an.
Wird nun in Form1 der Variable "frm" eine Form zugewiesen, so wird eine Instanz der Form2 erstellt, also Sub New durchlaufen.
Load und Shown werden erst aufgerufen, wenn die Form angezeigt wird.

Beispiel:
Beim Klick auf einen Button in Form1 wird dies aufgerufen:
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
    Button1.Click
    Form2.frm = Me
    Form2.Show()
  End Sub
Dies ist völlig korrekt und löst keinen Fehler aus.
Wird nun die Form2 geschlossen und erneut geöffnet tritt ein Fehler auf, da die Variable "frm" in Form2 nun Nothing ist.
Form2.frm = Me
Form2.Show()
Form2.Close()
Form2.Show() 'Hier Fehler im Load-Ereignis!
So ist es Richtig:
Form2.frm = Me
Form2.Show()
Form2.Close()
Form2.frm = Me
Form2.Show()
Vor dem Öffnen müssen also öffentliche Variablen erneut zugewiesen werden. Gleiches gilt für Zugriffe auf Steuerelemente.
Man kann dies sehr gut Testen, wenn man bei New, Load und Shown Console.WriteLine("...") einfügt.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Problem mit Formxy.shown1.948SvenZ09.03.15 12:00
Re: Problem mit Formxy.shown1.276Manfred X09.03.15 13:47
Re: Problem mit Formxy.shown1.217SvenZ09.03.15 14:03
Re: Problem mit Formxy.shown1.222Manfred X09.03.15 14:16
Re: Problem mit Formxy.shown1.234SvenZ09.03.15 14:26
Re: Problem mit Formxy.shown1.264Manfred X09.03.15 14:42
Re: Problem mit Formxy.shown1.177SvenZ09.03.15 17:11
Re: Problem mit Formxy.shown1.194Manfred X09.03.15 17:24
Re: Problem mit Formxy.shown1.360Kuno6010.03.15 16:19
Re: Problem mit Formxy.shown1.166SvenZ11.03.15 19:40
Re: Problem mit Formxy.shown1.121ModeratorDaveS11.03.15 20:29
Re: Problem mit Formxy.shown1.157SvenZ11.03.15 21:36

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel