vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Problem mit Formxy.shown 
Autor: SvenZ
Datum: 09.03.15 12:00

Ich öffne eine Form per Doppelklick auf einen TreeView Eintrag.
Im Formxy.shown event will ich eine Variable setzen.
Jetzt hab ich festgestellt, dass dieses .shown event nicht immer gefeuert wird, obwohl ich die Form vorher mit me.close echt geschlossen habe.
Wie komme ich dem Problem hier nach?
PS: ich setze jetzt meine Variable im visible_changed event, das klappt.

mit freundlichen Grüßen
Sven

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: Manfred X
Datum: 09.03.15 13:47

Hallo!

Wie "öffnest" Du dieses Formular?

Wenn Du eine neue Instanz erstellst und sie
mit der Show-Methode anzeigst, kannst Du die Variable
im "Load" oder im "Shown"-Event setzen.

Bei einem Dialog-Formular solltest Du vor der Anzeige des Dialogs
die Variable im rufenden Formular per öffentlicher Eigenschaft
des Dialog-Formulars setzen.

Beitrag wurde zuletzt am 09.03.15 um 13:50:35 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: SvenZ
Datum: 09.03.15 14:03

Ich öffne die Form einfach mit Formname.show().
Und ich bin auch sicher, dass das nicht nochmal passiert, solange die Form nicht geschlossen wurde.

Die Variable, die ich dort setzen will, ist schon public.
Auch wenn ich das Problem eigentlich schon gelöst habe (.visiblechanged),
ist doch das eigentliche Problem, warum das .shown Event nicht zuverlässig kommt.

mit freundlichen Grüßen
Sven

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: Manfred X
Datum: 09.03.15 14:16

Ich vermute, Du verwendest die sog. DefaultInstanz des Formulars.
(Ansprechen per Name). Die wird beim Schließen nicht vernichtet.
Die Nutzung ist in VB.Net zwar möglich, wird aber nicht empfohlen.

Erstelle Deine Instanzen untergeordneter Formulare
immer mit dem Schlüsselwort New.

Damit hast Du die volle Code-Kontrolle über das Erstellen,
Referenzieren und Vernichten von Instanzen.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: SvenZ
Datum: 09.03.15 14:26

OK, das geht dann so (?):
Public Form_sz As New Form  'Form_sz ist der Name der Form
Form_sz.show()
...
Form_sz.close()
und wie muss ich die Instanz vernichten?

mit freundlichen Grüßen
Sven

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: Manfred X
Datum: 09.03.15 14:42

Du mußt bei New den Typnamen der Form angeben, also z.B.

'Instanz von "Form1"-Form unter der Referenz-Variable "MyForm" erstellen
Dim MyForm As New Form1
Die per "MyForm.Show" angezeigte Instanz von Form1 wird beim "MyForm.Close" verworfen,
falls inzwischen keine weitere Referenz im Code gesetzt worden ist.
Alle Ressourcen werden freigegeben.
Die "MyForm"-Variable ist dann zwar nicht Nothing,
die referenzierte Formular-Instanz kann aber nicht mehr angezeigt werden.

Zugriffs-Variable für Instanzen untergeordneter Formulare die mit Show gezeigt werden
(nicht-modal), sind gewöhnlich auf der Modulebene des Owner-Formulars erstellt worden.

Einige weiterführende Links finden sich hier:
http://www.vbarchiv.net/forum/id22_i88720t88707_fehler-konvertierungsfehler-in-typ-integer.html

Beitrag wurde zuletzt am 09.03.15 um 14:58:31 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: SvenZ
Datum: 09.03.15 17:11

sehr aufschlußreich...danke.
Ich muß also vor jedem .show meiner Form (als Instanz) die Instanzvariable neu zuweisen (bei Doppelklick in meinem Treeview). Das bedeutet, es geht nicht public ... (da in privater Sub).
Blöderweise verwende ich in meiner Form aber wiederum Proceduren, in denen ich direkt auf das Formular referenziere, also sowas: Formularname.Textbox1.Text="irgendwas"
Das müsste dann alles auf die Formularinstanz umgeschrieben werden, wo mich wiederum o.g. Deklerationsproblem erschlägt.
Erfordert in meinem Fall massive struktrelle Änderungen, wo ich aber nicht drumrum kommen werden.

mit freundlichen Grüßen
Sven

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: Manfred X
Datum: 09.03.15 17:24

Was genau ist Dein Problem?
Du kannst durchaus DefaultInstanzen verwenden.
Du mußt vor dem Show dieses Formulars Deine gewünschten Werte
auf die öffentlichen Eigenschaften oder Membervariablen des
untergeordneten Formulars bereits im rufenden Formular zuweisen.

Sei "XForm" das StartFormular und "XSubForm" eine zweite Form ...
Public Class XForm
 
    Dim WithEvents btn1 As New Button With {.Parent = Me, .Text = "Sub1"}
    Dim WithEvents btn2 As New Button With {.Parent = Me, .Text = "Sub2", .Top _
      = 40}
 
 
    Private Sub btn1_Click(sender As Object, e As System.EventArgs) Handles _
      btn1.Click
 
        XSubForm.Text = "Gerufen von Button 1"
        XSubForm.Show()
 
    End Sub
 
 
    Private Sub btn2_Click(sender As Object, e As System.EventArgs) Handles _
      btn2.Click
 
        xSubform.Close()
 
        XSubForm.Text = "Gerufen von Button 2"
        XSubForm.Show()
 
    End Sub
 
End Class


Beitrag wurde zuletzt am 09.03.15 um 17:27:04 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: SvenZ
Datum: 11.03.15 19:40

ich glaube, ich hab die Ursache für das "Urproblem" gefunden.
Ich habe die Form mit .ShowDialog() und nicht wie ursprünglich gesagt mit .Show()
Ich weiß nicht warum, aber nachdem ich das geändert habe, geht auch mein .Shown wieder zuverlässig.
Danke ...

mit freundlichen Grüßen
Sven

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: ModeratorDaveS (Moderator)
Datum: 11.03.15 20:29

Wenn man die MSDN Dokumentation mal anschaut findet man die Erklärung

Bei einem als modales Dialogfeld angezeigten Formular wird durch Klicken auf die Schaltfläche Schließen (die Schaltfläche mit einem X in der rechten oberen Ecke des Formulars) das Formular ausgeblendet, und die DialogResult-Eigenschaft wird auf DialogResult.Cancel festgelegt. Im Gegensatz zu nicht modalen Formularen wird die Close-Methode nicht automatisch durch .NET Framework aufgerufen, wenn der Benutzer auf die Schaltfläche zum Schließen eines Dialogfelds klickt oder den Wert der DialogResult-Eigenschaft festlegt. Stattdessen wird das Formular ausgeblendet, und es kann ohne Erstellen einer neuen Instanz des Dialogfelds wieder eingeblendet werden. Da ein als Dialogfeld angezeigtes Formular ausgeblendet und nicht geschlossen wird, müssen Sie die Dispose-Methode des Formulars aufrufen, wenn das Formular von der Anwendung nicht mehr benötigt wird.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Formxy.shown 
Autor: SvenZ
Datum: 11.03.15 21:36

aha, danke

mit freundlichen Grüßen
Sven

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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