vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Verschiedenes / Sonstiges   |   VB-Versionen: VB.NET07.04.05
Forms-Collection nachgebaut (VB.NET)

Viele VB6-Umsteiger vermissen in VB.NET schmerzlich die Forms-Auflistung, mit der sich schnell alle aktuell geladenenen Formen ermitteln lassen. Wir schaffen Abhilfe :-)

Autor:   DaveSBewertung:     [ Jetzt bewerten ]Views:  12.978 
ohne HomepageSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10kein Beispielprojekt 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Gerade VB6-Umsteiger vermissen in VB.NET schmerzlich die allseits beliebte Forms-Auflistung von VB, mit der sich schnell alle aktuell geladenen Formen ermitteln lassen. Auf diese Weise lässt sich bspw. prüfen, ob ein bestimmtes Fenster bereits geladen ist.

    Um die Forms-Auflistung auch in VB.NET wieder verfügbar zu machen, bauen wir uns einfach ein kleines Klassenmodul. Jedesmal, wenn eine neue Instanz einer Form geladen und angezeigt werden soll, rufen wir die Show-Methode der Klasse auf, wobei die Klasse durch Überladen der Prozedur folgende 3 Varianten zur Auswahl anbietet:

    1. Show (frm As Form)
    2. Show (frm As Form, AllowMulti As Boolean)
    3. Show (frm As Form, AllowMulti As Boolean, owner As Form)

    1. Show (frm As Form)
    Durch Aufruf der 1. Variante prüft die Klasse, ob die übergebene Form bereits geladen ist. Falls ja, wird die Form nicht neu geladen!

    2. Show (frm As Form, AllowMulti As Boolean)
    Durch Angabe von "AllowMulti = True" teilen wir der Klasse mit, dass eine Form mehrfach geladen und angezeigt werden darf.

    3. Show (frm As Form, AllowMulti As Boolean, owner As Form)
    Über den "owner"-Parameter lässt sich zusätzlich noch das "Eltern"-Fenster angeben.

    Sobald eine Form durch den Anwender geschlossen wird, sollte diese natürlich auch im Klassenmodul entsprechend wieder aus dem ArrayList entfernt werden. Hierzu leiten wir das "Closed"-Ereignis einfach um (siehe AddHandler-Aufruf), so dass beim Schließen autom. das Closed-Ereignis des Klassenmoduls ausgelöst wird.

    Sollen alle geladenen Form-Instanzen auf einmal geschlossen werden, brauchen wir lediglich die "CloseAll"-Prozedur der Klasse aufrufen.

    Weiterhin lässt sich über die Eigenschaft IsFormLoaded prüfen, ob eine bestimmte Form bereits geladen ist.

    So... und hier der Code unsere VB.NET "MyForms"-Klasse:

    Public Class MyForms
      Private Shared formsCollection As New ArrayList
     
      ' Prüfen, ob Form bereits geladen
      Public Shared ReadOnly Property IsFormLoaded(ByVal name As String) As Boolean
        Get
          For Each f As Form In formsCollection
            If f.Name Is name Then
              Return True
            End If
          Next
          Return False
        End Get
      End Property
     
      ' Form anzeigen (keine Mehrfach-Instanz zulassen!)
      Public Shared Sub Show(ByVal frm As Form)
        Show(frm, False, Nothing)
      End Sub
     
      ' Form anzeigen (Mehrfach-Instanz zulassen!)
      Public Shared Sub Show(ByVal frm As Form, ByVal allowMulti As Boolean)
        Show(frm, allowMulti, Nothing)
      End Sub
     
      ' Form anzeigen und Eltern-Fenster mitangeben
      Public Shared Sub Show(ByVal frm As Form, ByVal allowMulti As Boolean, ByVal owner As Form)
        Dim found As Boolean = False
     
        For Each f As Form In formsCollection
          If frm Is f Then
            found = True
            Exit For
          Else
            If Not allowMulti AndAlso frm.Name = f.Name Then
              frm.Dispose()
              Exit Sub
            End If
         End If
       Next
     
       If Not found Then
         formsCollection.Add(frm)
         AddHandler frm.Closed, AddressOf Closed
         If Not owner Is Nothing Then
           owner.AddOwnedForm(frm)
         End If
       End If
     
       frm.Show()
      End Sub
     
      ' Form aus dem ArrayList entfernen, 
      ' da diese geschlossen wurde
      Private Shared Sub Closed(ByVal sender As Object, ByVal e As System.EventArgs)
        formsCollection.Remove(sender)
      End Sub
     
      ' alle Formen schließen
      Public Shared Sub CloseAll()
        Dim tal As ArrayList = formsCollection.Clone
        For Each f As Form In tal
          f.Close()
        Next
      End Sub
    End Class

    Beispiel für den Aufruf:

    ' neue Instanz einer Form laden und anzeigen
    ' (merhfaches Laden und Anzeigen erlaubt!)
    Dim oForm As New Form2
    MyForms.Show(oForm, True)
    ' Prüfen, ob bestimmte Form bereits geladen
    ' Falls nicht, jetzt laden und anzeigen
    If Not MyForms.IsFormLoaded("Form2") Then
      Dim oForm As New Form2
      MyForms.Show(oForm)
    End If
    ' alle geladenen Formen schließen
    MyForms.CloseAll()

    Dieser Tipp wurde bereits 12.978 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 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