Zunächst erstellt man die Form, die als "Waiting-Form" genutzt werden soll. Die Form sollte möglichst folgende Eigenschaftseinstellungen haben:
Wenn man möchte, dass die Form mit einem DropShadow dargestellt werden soll, dann kann man das mit dem folgenden Code, den man in die FormKlase einfügt, erreichen: ' Define the CS_DROPSHADOW constant Private Const CS_DROPSHADOW As Integer = 131072 ' Override the CreateParams property Protected Overrides ReadOnly Property CreateParams() As CreateParams Get Dim cp As CreateParams = MyBase.CreateParams cp.ClassStyle = cp.ClassStyle Or CS_DROPSHADOW Return cp End Get End Property Dann platziert man auf der Form ein Progressbar-Control mit den Eigenschaften:
Das sind so zu sagen die vorbereitenden Tätigkeiten. Damit diese Form als asynchrone WaitingForm angezeigt wird, benötigt man die folgende Klasse 'clsWaitingWindow.vb': Imports System.Windows.Forms Imports System.Threading Public Class PleaseWait Implements IDisposable Private waitSplash As Form Private waitLocation As Point ''' <summary> ''' Einstellungen beim Erstellen der Waitingform ''' </summary> ''' <param name="theWaitingForm">Name der zu verwendenden Form</param> ''' <param name="x">die linke Position der Waitingform</param> ''' <param name="y">die obere Position der Waitingform</param> ''' <remarks>Gibt man location nicht explizit als Point an, ''' wird die Waitingform auf dem Screen zentriert gezeigt</remarks> Public Sub New(ByVal theWaitingForm As Form, _ Optional ByVal x As Integer = 0, Optional ByVal y As Integer = 0) waitSplash = theWaitingForm waitLocation = New Point(x, y) Dim thr As New Thread(New ThreadStart(AddressOf workerThread)) With thr .IsBackground = True .SetApartmentState(ApartmentState.STA) .Start() End With End Sub Public Sub Dispose() Implements IDisposable.Dispose waitSplash.Invoke(New MethodInvoker(AddressOf stopThread)) End Sub Private Sub stopThread() waitSplash.Close() End Sub Private Sub workerThread() With waitSplash If waitLocation = New Point(0, 0) Then .StartPosition = FormStartPosition.CenterScreen Else .Location = waitLocation End If .TopMost = True End With Application.Run(waitSplash) End Sub End Class Zur Anwendung der Form kann man diesen Code benutzen, wenn der zu erwartend länger dauernde Prozess stattfindet (bspw. Laden von umfangreichen Datenbeständen in DatagridView): Using New PleaseWait(NameOfWaitingform) ' ... hier die langdauernden Abläufe starten End Using Dann wird an dieser Stelle die WaitingForm mit der animierten Progressbar im Vordergrund angezeigt. Die Form bleibt solange sichbar, wie der Prozess dauert, dann wird sie wieder ausgeblendet. Als Position für die Form kann ein individueller Punkt angegeben werden, gibt man keinen an, wird die Form auf dem Bildschirm zentriert angezeigt. Dieser Tipp wurde bereits 13.453 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) 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. |
sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |