WinFuture-Forum.de: [vb] Daten Aus Form 1 An Form 2 übergeben - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[vb] Daten Aus Form 1 An Form 2 übergeben Ankommen tun'se, nur angeziegt werden se nicht...


#1 Mitglied ist offline   Markus@SonyVaio 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 16. Juli 06
  • Reputation: 0
  • Wohnort:Berlin
  • Interessen:Overclocking ;)

geschrieben 08. Januar 2010 - 15:09

Moin moin,

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
AMD Phenom 9500
ASUS M3A32-MVP Deluxe
ATI HD3870
4GB DDR2-800 G.E.I.L
320GB Samsung @ SATA2
Windows XP Pro
Creative X-Fi Xtreme Gamer Fatal1ty Pro. Series

Tower --> Eingefügtes Bild
Laptop -> Eingefügtes Bild
0

Anzeige



#2 Mitglied ist offline   deezee 

  • Gruppe: aktive Mitglieder
  • Beiträge: 119
  • Beigetreten: 05. Februar 09
  • Reputation: 0

geschrieben 08. Januar 2010 - 15:43

meine christalkugel sagt mir du machst was falsch

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 ?
0

#3 Mitglied ist offline   karl0 

  • Gruppe: aktive Mitglieder
  • Beiträge: 386
  • Beigetreten: 25. März 06
  • Reputation: 4

geschrieben 08. Januar 2010 - 15:58

Huhu,
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
Du bist die Nr. 1 - BLUE!!
0

#4 Mitglied ist offline   Markus@SonyVaio 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 16. Juli 06
  • Reputation: 0
  • Wohnort:Berlin
  • Interessen:Overclocking ;)

geschrieben 08. Januar 2010 - 17:06

Joa... zum Thema Code wäre nicht schlecht xD

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
AMD Phenom 9500
ASUS M3A32-MVP Deluxe
ATI HD3870
4GB DDR2-800 G.E.I.L
320GB Samsung @ SATA2
Windows XP Pro
Creative X-Fi Xtreme Gamer Fatal1ty Pro. Series

Tower --> Eingefügtes Bild
Laptop -> Eingefügtes Bild
0

#5 Mitglied ist offline   Pac Man 

  • Gruppe: aktive Mitglieder
  • Beiträge: 35
  • Beigetreten: 05. November 09
  • Reputation: 0

geschrieben 08. Januar 2010 - 17:27

Dazu brauchste wohl Multithreading-Architektur. In Vb.Net kann man es sonst mit Label.Refresh oder Me.Invalidate etc. ausprobieren.
0

#6 Mitglied ist offline   Borbadilla 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 16. November 09
  • Reputation: 0
  • Wohnort:Zuhause

geschrieben 08. Januar 2010 - 18:43

Hallo Markus@SonyVaio,

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:

CODE
' Display the ProgressBar control.
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
0

#7 Mitglied ist offline   Markus@SonyVaio 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 16. Juli 06
  • Reputation: 0
  • Wohnort:Berlin
  • Interessen:Overclocking ;)

geschrieben 12. Januar 2010 - 12:20

Hallo,

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

AMD Phenom 9500
ASUS M3A32-MVP Deluxe
ATI HD3870
4GB DDR2-800 G.E.I.L
320GB Samsung @ SATA2
Windows XP Pro
Creative X-Fi Xtreme Gamer Fatal1ty Pro. Series

Tower --> Eingefügtes Bild
Laptop -> Eingefügtes Bild
0

#8 Mitglied ist offline   Borbadilla 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 16. November 09
  • Reputation: 0
  • Wohnort:Zuhause

geschrieben 14. Januar 2010 - 12:44

Hi Markus,

welche XP- Version?
+
Welches .Net Framework läuft unter XP?
0

#9 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.668
  • Beigetreten: 28. Mai 06
  • Reputation: 218
  • Geschlecht:Männlich

geschrieben 23. Januar 2010 - 11:51

wie wäre es mit nem thread und wenn sich da was tut solll er updaten?
0

#10 Mitglied ist offline   WinlinMax 

  • Gruppe: aktive Mitglieder
  • Beiträge: 588
  • Beigetreten: 14. März 04
  • Reputation: 3
  • Geschlecht:Männlich

geschrieben 23. Januar 2010 - 19:50

Dein Problem ist das der Vorgang asynchron ausgeführt werden muss.
Dies ist mit dem BackgroundWorker leicht zu realisieren.
Häufigster Fehler ist immer noch der DAU
0

#11 Mitglied ist offline   Markus@SonyVaio 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 16. Juli 06
  • Reputation: 0
  • Wohnort:Berlin
  • Interessen:Overclocking ;)

geschrieben 15. Februar 2010 - 11:40

Hey, entschuldigt die lange Zeit ohne Reaktion...

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
AMD Phenom 9500
ASUS M3A32-MVP Deluxe
ATI HD3870
4GB DDR2-800 G.E.I.L
320GB Samsung @ SATA2
Windows XP Pro
Creative X-Fi Xtreme Gamer Fatal1ty Pro. Series

Tower --> Eingefügtes Bild
Laptop -> Eingefügtes Bild
0

#12 Mitglied ist offline   DennisMoore 

  • Gruppe: aktive Mitglieder
  • Beiträge: 177
  • Beigetreten: 27. Februar 07
  • Reputation: 0

geschrieben 15. Februar 2010 - 12:15

Zum Code in der Form2:

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 :cool:

Dieser Beitrag wurde von DennisMoore bearbeitet: 15. Februar 2010 - 12:16

0

#13 Mitglied ist offline   Markus@SonyVaio 

  • Gruppe: aktive Mitglieder
  • Beiträge: 292
  • Beigetreten: 16. Juli 06
  • Reputation: 0
  • Wohnort:Berlin
  • Interessen:Overclocking ;)

geschrieben 15. Februar 2010 - 13:10

Hey,
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
AMD Phenom 9500
ASUS M3A32-MVP Deluxe
ATI HD3870
4GB DDR2-800 G.E.I.L
320GB Samsung @ SATA2
Windows XP Pro
Creative X-Fi Xtreme Gamer Fatal1ty Pro. Series

Tower --> Eingefügtes Bild
Laptop -> Eingefügtes Bild
0

#14 Mitglied ist offline   DennisMoore 

  • Gruppe: aktive Mitglieder
  • Beiträge: 177
  • Beigetreten: 27. Februar 07
  • Reputation: 0

geschrieben 15. Februar 2010 - 17:00

Beitrag anzeigenZitat (Markus@SonyVaio: 15.02.2010, 14:10)

Hey,
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

0

#15 Mitglied ist offline   WinlinMax 

  • Gruppe: aktive Mitglieder
  • Beiträge: 588
  • Beigetreten: 14. März 04
  • Reputation: 3
  • Geschlecht:Männlich

geschrieben 03. März 2010 - 22:52

Du fügst aus den Komponenten eine Backgroundworkerkomponente hinzu (wie zum beispiel auch einen button)
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).
Häufigster Fehler ist immer noch der DAU
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0