[vb] Daten Aus Form 1 An Form 2 übergeben Ankommen tun'se, nur angeziegt werden se nicht...
#1
geschrieben 08. Januar 2010 - 15:09
nachdem ich schon mein Freund google befragt habe und auch im Forum gesucht hab (und da auch nix passendes gefunden habe nun so).
Ich habe folgendes Problem:
Ich habe eine Hauptform, in der findet der Hauptteil der Programmzeit statt.
In diesem Programm werden verschiedene Daten gesammelt, welche dann gespeichert werden.
Da das speichern aber eine ganze Weile dauert will ich eine 2. Form aufrufen, in der ein Bildchen angezeigt wird und per Label der Status (also der Aktuelle Fortschritt als String) ausgegeben wird.
Das übergeben funzt auch wunderbar, per MSgBox(Uebergabewert) kann ich mir den String ausgeben lassen den ich dahin übergabe habe... allerdings aktualisiert sich das Label nicht... es bleibt die ganze Zeit leer
Kann mir jmd. weiterhelfen?
Grüße und dank im vorraus,
Markus
Anzeige
#2
geschrieben 08. Januar 2010 - 15:43
reicht das ?
(nicht böse gemeint ein bischen code wäre schon ganz gut dein problem verstehe ich so nicht wirklich)
ist die msgbox in form1 oder form2 ?
#3
geschrieben 08. Januar 2010 - 15:58
Also ich gehe mal von aus, dass du sehr viel code fürs speichern hast also dass es über eine längere Prozedur verfügt.
Da würde ich es so machen.
Speicher ENTWEDER mit der 2ten Form und packe zwischendurch ein paar Punkte rein, welche den Fortschrittsbalken aktualisieren.
Balken auf 0 Code Code Balken auf 50 Code Code Balken auf 100 Fertig
ODER
Speicher mit der ersten Form und Rufe die 2te immer neu auf, mit einem aktualisierten Fortschritssbalkenwert.
Form 2 Aufrufen (Übergabewert 0) Code Code Form 2 schließen Form 2 Aufrufen (Übergabewert 50) Code Code Form 2 schließen Form 2 Aufrufen (Übergabewert 100) Fertig
Ich würde eher zur ersten Möglichkeit raten, da dass wohl eleganter aussieht, als wenn sich die Form mit dem Balken immer neu aufruft
MfG Karl0
#4
geschrieben 08. Januar 2010 - 17:06
Es ist so: (habs gerade abstrahiert)
Class Form_1 ()
Sub DatenExport()
Dim FMBUL as New FormMitBildUndLabel
FormMitBildUndLabel.Show()
FMBUL.Statusausgabe("1 von x")
export_Daten_1()
FMBUL.Statusausgabe("1 von x")
export_Daten_2()
FMBUL.Statusausgabe("1 von x")
export_Daten_3()
FormMitBildUndLabel.Hide()
End Sub
End Class
Class FormMitBildUndLabel()
Function Statusausgabe (ByRef Status)
lblStatusanzeige.Text = Status
Return 0
End Function
End Class
@karl0: Die 2. Methode funktioniert nicht, da ich ja die Daten nicht angezeigt bekommen in der 2. Form...
Reicht der Code soweit erstmal aus?
Gruß,
Markus
#5
geschrieben 08. Januar 2010 - 17:27
#6
geschrieben 08. Januar 2010 - 18:43
mit VB.Net kannst du die Klasse ProgressBar verwenden,sie sollte genau das erfüllen was du wünschst. Über die MSDN- Hilfe kannst du mehr darüber erfahren.
Hier ein Beispiel zum kopieren von Dateien:
pBar1.Visible = True
' Set Minimum to 1 to represent the first file being copied.
pBar1.Minimum = 1
' Set Maximum to the total number of files to copy.
pBar1.Maximum = filenames.Length
' Set the initial value of the ProgressBar.
pBar1.Value = 1
' Set the Step property to a value of 1 to represent each file being copied.
pBar1.Step = 1
' Loop through all files to copy.
Dim x As Integer
for x = 1 To filenames.Length - 1
' Copy the file and increment the ProgressBar if successful.
If CopyFile(filenames(x - 1)) = True Then
' Perform the increment on the ProgressBar.
pBar1.PerformStep()
End If
Next x
End Sub
Hoffe ich konnte helfen.
Gruß Bobadilla
#7
geschrieben 12. Januar 2010 - 12:20
hat ein bisschen gedauert, aber nun kann ich mal wieder was antworten.
Ich habe mich von der 2. Form verabschiedet (habs nicht auf die Reihe bekommen) und quasi ein Best-of der Vorschläge erstellt.
Habe es nun so implementiert, dass ich eine Progressbar in der Programmstatusleiste habe und ein Label daneben welches den aktuellen Bearbeitungsschritt ausgibt.
Das ganze funktionierte unter Win7 auch wunderbar. Allerdings unter WinXP nicht, da er da das Label während der Bearbeitung nicht aktualisiert...
Habe es nun mit Me.Refresh() gemacht, so klappt es...
Danke für die Hilfe!
Warum aktualisiert XP das eigentlich nicht ordentlich? Weiß das einer?
Grüße,
Markus
[Edit: Rechtschreibfehler entfernt]
Dieser Beitrag wurde von Markus@SonyVaio bearbeitet: 12. Januar 2010 - 12:21
#8
geschrieben 14. Januar 2010 - 12:44
welche XP- Version?
+
Welches .Net Framework läuft unter XP?
#9
geschrieben 23. Januar 2010 - 11:51
#10
geschrieben 23. Januar 2010 - 19:50
Dies ist mit dem BackgroundWorker leicht zu realisieren.
#11
geschrieben 15. Februar 2010 - 11:40
Ich habe noch nie mit dem BackGroundworker gearbeitet, wie geht man damit um?
@Borbadilla WinXP SP3+ .Net Framework 3.5
Wenn einer von euch vllt. noch Hilfe für mein Problem hier weiß -> Klick mitsch wäre ich dankbär =)
Grüße,
Markus
#12
geschrieben 15. Februar 2010 - 12:15
Du verwendest eine Funktion der du einen Wert übergibst, der dann wiederum in ein Label geschrieben wird. Die Übergabe erfolgt per Referenz. Das funktioniert aber nicht, weil du einen statischen Text beim Übergeben verwendest auf den nicht referenziert werden kann.
Ändere ByRef in ByVal und schau obs funktioniert. Müßte eigentlich.
Oh, und wenn du statt einer Function eine Sub verwendest, brauchst du auch keinen Returnwert
Dieser Beitrag wurde von DennisMoore bearbeitet: 15. Februar 2010 - 12:16
#13
geschrieben 15. Februar 2010 - 13:10
ich hab schonmal mit ByVal gearbeitet (ging auch nicht) und dann im Netz irgendwo gefunden, dass man es per ByRef machen soll... das hab ich dann ausprobiert und ging auch nicht^^
Aber Die Sub Idee ist gar nicht so doof, kA warum ich da ne Function genommen hab Oo
#14
geschrieben 15. Februar 2010 - 17:00
Zitat (Markus@SonyVaio: 15.02.2010, 14:10)
ich hab schonmal mit ByVal gearbeitet (ging auch nicht) und dann im Netz irgendwo gefunden, dass man es per ByRef machen soll... das hab ich dann ausprobiert und ging auch nicht^^
Aber Die Sub Idee ist gar nicht so doof, kA warum ich da ne Function genommen hab Oo
Könnte auch sein, dass der Thread in dem die Anwendung läuft zu beschäftigt ist um die Anzeige (das Label) zu aktualisieren. Das könnte auch erklären warum es unter XP nicht geht und unter Vista/7 schon.
Ich würd mal versuchen den Thread beim ändern des Labels kurz zu pausieren, damit das Fenster erneuert werden kann. Das geht mit "DoEvents".
Quasi so:
- Exportfunktion die irgendwas macht
- Funktionsaufruf Wert setzen
- DoEvents
(Vielleicht sogar 2 oder 3 mal hintereinander)
- Exportfunktion die irgendwas macht
- Funktionsaufruf Wert setzen
- DoEvents
... usw usf.
Das brauchst du natürlich nicht wenn du in der Exportfunktion bereits DoEvents verwendest.
Dieser Beitrag wurde von DennisMoore bearbeitet: 15. Februar 2010 - 17:01
#15
geschrieben 03. März 2010 - 22:52
Dann klickst du 2x darauf und gibst hier den Code ein der ausgeführt werden soll.
Anschließend setzt du in der Form Load den Befehl "BackGroundWorker1.RunworkerAsync()" ein.
Davor solltest du allerdings noch "Me.CheckForIllegalThreads=False einsetzten" (Oder so ähnlich).
- ← [java] Texarea Mit Horizontaler Scrollbar - Soll Immer Nach Unten Gecr
- Programmierung
- Eine Zahl X In X Zufällige Teile Teilen →