vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 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
Progressbar 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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Progressbar im Hauptformular ansprechen 
Autor: ModeratorFZelle (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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Re: Progressbar im Hauptformular ansprechen 
Autor: asam
Datum: 26.01.10 21:39

Vielen Dank für Eure Antworten. Für Anfänger ein gewaltiges Thema

Ich habe folgendes versucht.

Ein Interface erzeugt:
Public Interface InterPrgBar
 
    Function anzeigen() As String
 
End Interface
Eine Klasse erzeugt:
Public Class showPrgBar : Implements InterPrgBar
 
    Public Function anzeigen() As String Implements InterPrgBar.anzeigen
        anzeigen = "hurra"
    End Function
 
End Class
Innerhalb des Hauptformulars einen Button angelegt:
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
   System.EventArgs) Handles Button1.Click
        Dim test As New showPrgBar
        MsgBox(test.anzeigen())
    End Sub
bis hierhin funktioniert mein Lernprzcess...

aber innerhalb der Klassenbibliothek mit eigenem Formular:

 Dim testanzeige As String
 
    Sub New(ByVal testanzeige As String)
        InitializeComponent()
 
        ...... wie übernimmt ein Konstruktor ein Interface  ?????
        ...... und wie binde ich den ProgressBar als Objekt mit ein ?????
    End Sub
Für jede Hilfe dankbar.

Gru? asam

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Progressbar im Hauptformular ansprechen 
Autor: ModeratorFZelle (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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Progressbar im Hauptformular ansprechen 
Autor: ModeratorFZelle (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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

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