2 Formulare gleichzeitig laufen lassen

  • VB6

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    2 Formulare gleichzeitig laufen lassen

    Hab mal wieder eine Frage:

    Ich habe 2 Formulare, das eine kopiert Daten von einem Ordner in einen anderen. Dies dauert immer ein wenig, deswegen das zweite Formular mit einer Art Progrssbar.

    Nun ist mein Problem:

    Wenn das Progressbar-Formular durch "form2.show" geöffnet wird läuft darin eine Dauerschleife um eine visuelle Verschönerung zu bekommen. Diese Schleife stoppt dann den Kopiervorgang aus dem anderen Formular.

    Meine Frage also:

    Kann man irgendwie die zwei Formulare separat durchlaufen lassen?
    Am besten so, dass man das eine noch durch das andere öffnen und schließen kann (wenn der Kopiervorgang beendet ist, soll das Progressbar-Formular wieder zugehen).

    Oder hat jemand eine andere Idee, wie man das warten mit einer anderen Art von Progressbar überbrücken kann?

    Danke schonmal für eure Hilfe!!!


    Schreibe mit VB 5.0.
    Mach es halt wie in Window!

    Wenn man etwas kopiert und gleichzeitig ein Anderes Programm offen hat, funktunierts ja auch.
    Soweit ich weiß wird das Programm nocheinmal geöffnet mit einer anderen Einstiegvariable.

    Oder mach es so. Lass deien Exe nocheinmal starten und kontrolliere hiermit ob sie schon läuft dann wird die 2 Form aufgerufen ansonten ganz normal:

    Visual Basic-Quellcode

    1. Public Sub Main()
    2. ' Prüfen, ob Anwendunng bereits gestartet
    3. If App.PrevInstance Then
    4. MsgBox "Achtung!" & vbCrf & _
    5. "Es läuft bereits eine Instanz dieser Anwendung." & _
    6. vbCrLf & vbCrLf & _
    7. "Ein mehrfaches gleichzeitiges Ausführen ist " & _
    8. "nicht möglich!"
    9. ' Anwendung beenden
    10. End
    11. End if
    12. End Sub
    Hallo Pepper_Phil,
    probier' mal dieses:

    Visual Basic-Quellcode

    1. ' Contols: 1 * Timer, 1 * Picturebox
    2. Private Breite&, XPos&
    3. Private Sub Form_Load()
    4. Me.ScaleMode = vbPixels
    5. With Picture1
    6. .ScaleMode = vbPixels
    7. .Move .Left, .Top, 400, 30
    8. .AutoRedraw = True
    9. End With
    10. Breite = 100
    11. Timer1.Interval = 15
    12. Timer1.Enabled = True
    13. End Sub
    14. Private Sub Timer1_Timer()
    15. Picture1.Cls
    16. Picture1.Line (XPos, 0)-Step(Breite, Picture1.ScaleHeight), RGB(0, 0, 128), BF
    17. XPos = XPos + 2
    18. If XPos >= Picture1.ScaleWidth Then XPos = -Breite
    19. End Sub
    Gruss,

    Neptun
    Bei dem Timer ist mein Problem, dass ich nicht weiß wie lange der Kopiervorgang dauert. Also auf was ich den Timer einstellen soll. Momentan habe ich "bitte warten" da stehen und dahinter ... und die Punkte werden mit einer Schleife jeweils eingefügt. Provisorisch liegt da eine Dauerschleife drum, die, wie gesagt, verhindert, dass das andere Formular fortgesetzt wird.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub Form_activate()
    3. Dim i As Byte
    4. Dim tm As Long
    5. Dim n As Byte
    6. n = 1
    7. Do
    8. For i = 1 To 4
    9. tm = Timer()
    10. Do
    11. Label1(i).Visible = True
    12. DoEvents
    13. Loop Until Timer() > tm + 1
    14. Next i
    15. For i = 1 To 4
    16. Label1(i).Visible = False
    17. Next i
    18. Loop While n = 1
    19. End Sub
    Hallo Pepper_Phil,
    ich glaube, du hast gar nicht verstanden was der Timer

    macht. Bei der Schleife weißt du doch auch nicht, wie

    lange der Kopiervorgang dauert. Die Zeit muss auch

    bei dem Timer gar nicht eingestellt werden. Am Ende

    des Kopiervorgangs einfach Unload Form_mit_Progressbar,

    beendet den Timer.
    Gruss,

    Neptun
    Hallo Pepper_Phil,

    jetzt ist nur das Problem, dass das Kopieren immer für die Zeit anhält, in der das Formular "Form_mit_Progressbar" durchläuft. Es soll nebenherlaufen...geht das?

    Kann eigentlich nicht sein. Rufst du die Form Modal oder Modeless auf?

    Werden mehrere Dateien kopiert, oder nur eine?
    Gruss,

    Neptun
    Du musst den Kopiervorgang in einem separaten Thread ausführen und den Fortschritt threadsicher (!) an die ProgressBar melden.
    Wenn du das Ganze single-threaded ausführst blockiert der Kopiervorgang den Mainthread und die ProgressBar wird so lange nicht geupdated wie der Vorgang dauert (Denn ein Thread kann immer nur eine Aufgabe gleichzeitig bearbeiten).

    gruß
    hal2000
    Gruß
    hal2000