| |
VB.NET - Ein- und UmsteigerProgressbar im Hauptformular ansprechen | | | Autor: asam | Datum: 26.01.10 15:52 |
| Hallo liebes Forum,
irgendwie habe ich wohl ein Verständnisproblem ...
In meiner Windos.Form-Anwendung gibt es ein Hauptformular. Meine eingebundenen Klassen enthalten wiederum Formulare die mittels Code gefüllte werden. Das Füllen dieser Formulare dauert aufgrund diverser Datenbankzugrifffe einigermaßen lang.
Nun möchte ich den Fortschritt in der Progreßbar des Statusstrip im Hauptformular anzeigen, was mir nicht gelingt, da ich aus den Formularen der Klassen oder den Klassen selbst nicht auf die Progressbar des Startformulars zugreifen kann.
Offensichtlich fehlt mir noch etwas Grundlegendes.
Vielen Dank im Voraus.
Gru? asam | |
Re: Progressbar im Hauptformular ansprechen | | | Autor: FZelle (Moderator) | Datum: 26.01.10 16:21 |
| Deine Unterformulare brauchen einen Verweis auf die Funktionalität diese Progressbar zu setzen.
Das lässt sich auf VB6 weise ( schlechtestes OOP ) mit einer shared Variablen lösen.
Die bessere VB.NET Variante wäre, wenn Du dir ein Interface erstellst, das z.b. nur die Funktionen
StartProgress(Min,Max), SetProgress und EndProgress ( o.ä.) hat, die dann von deinem HauptFormular u.a. implementiert werden.
Deine Unterformulare haben dann entweder einen Constructorparameter oder ein Property,
das dieses Interface übernimmt, und das wird beim erstellen der Unterform dann gesetzt.
Von da an kann deine Unterform diese Funktionen ausführen.
Bedenke aber, das langlaufende Aktionen in einen extra Thread gehören, der aber nur per Invoke auf
UI Elemente zugreifen darf. | |
Re: Progressbar im Hauptformular ansprechen | | | Autor: Maas | Datum: 26.01.10 16:23 |
| Offensichtlich fehlt mir noch etwas Grundlegendes.
Offensichtlich das Verständins für OOP.
Ohne etwas Code lässt sich das aber auch schwierig sagen, aber ich würde mal schätzen, dass du mit Events am besten bedient bist.
Maas | |
Re: Progressbar im Hauptformular ansprechen | | | Autor: FZelle (Moderator) | Datum: 26.01.10 22:26 |
| Naja, du hast Dir ja auch gleich alles auf einmal vorgenommen, selber schuld.
1. Es gibt Namenskonventionen die sinn machen, und Abkürzungen an der falschen stelle tragen
eher zur verschlimmbesserung der Lesbarkeit bei.
IProgressAction wäre ein besserer Name.
Ausserdem soll das hier die Funktionalität sein, die von der Unterform aufgerufen wird, also
eher
Public Interface IProgressAction
Sub StartProgress(ByVal startValue as Integer, ByVal StopValue as Integer )
Function Anzeigen(ByVal progressPercentage as Integer, ByVal progressString _
As String)
End Interface 2. Dieses Interface sollte dann von deiner MainForm implementiert werden, denn die Funktionen
sollten dort stattfinden
3. Der Constructor ( also New ) deiner Unterforms muss dann natürlich um einen Parameter
erweitert werden.
4. Beim erstellen deiner Unterform muss dann nur als Parameter für IProgressAction deine MainForm angegeben werden. | |
Re: Progressbar im Hauptformular ansprechen | | | Autor: asam | Datum: 27.01.10 17:40 |
| Hallo FZelle,
vielen Dank für Deine Antwort.....wenn man sich erst einmal an einem Thema festgebissen hat....
Um das neue Them zu lernen habe ich mir unabhängig von meinem kleinen Projekt einen "Testaufbau" mit Deinen angaben gemacht.
Public Class MainForm : Implements IProgressAction
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
Dim FormularEins As UfoEins = New UfoEins(Me)
FormularEins.Show()
End Sub
Public Function Anzeigen(ByVal progressPercentage As Integer, ByVal _
progressString As String) As Object Implements IProgressAction.Anzeigen
Anzeigen = MsgBox(Anzeigen(50, "TestString"))
End Function
End Class Das Interface mit Deinem Code erstellt. Mein Unterformular siehr so aus:
Imports System.Windows.Forms
Public Class UfoEins
Dim formular As Form
Sub New(ByVal frm As Form)
InitializeComponent()
formular = frm
End Sub
Private Sub UfoEins_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
' geht nicht. Irgend etwas fehlt noch
formular.anzeigen()
End Sub
End Class Wie ich es auch drehe und wende, ich komme zu keinem Ergebnis. Irgendwie bekomme ich keinen "Zugriff" aus "UfoEins" auf die Function "anzeigen()".
Für jede Hilfe dankbar.
Gru? asam | |
Re: Progressbar im Hauptformular ansprechen | | | Autor: FZelle (Moderator) | Datum: 27.01.10 18:09 |
| Naja, du musst dann schon als Parameter des Constructors nicht Form sondern IProgressAction angeben.
Imports System.Windows.Forms
Public Class UfoEins
Dim ProgressAction As IProgressAction
Sub New(ByVal frm As IProgressAction)
InitializeComponent()
ProgressAction = frm
End Sub
Private Sub UfoEins_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
' geht nicht. Irgend etwas fehlt noch
ProgressAction.anzeigen(0, "test")
End Sub
End Class | |
Re: Progressbar im Hauptformular ansprechen | | | Autor: asam | Datum: 28.01.10 07:50 |
| Hallo FZelle,
... hab ich mir fast gedacht, dass es so etwas war. Hab zwar viel Zeit damit verbracht, aber auch viel gelernt, und die Schnittstelle funktioniert auch.
Vielen Dank noch einmal.
Gru? asam | |
| 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 |
|
|
sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere InfosTipp des Monats 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...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|