WinFuture-Forum.de: [c#] Informationen An Eine Andere Form übermitteln - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[c#] Informationen An Eine Andere Form übermitteln Suche alternativen


#1 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 09. Mai 2008 - 14:19

Ich habe ein Form, in der Daten verarbeitet werden. Diese kann (durch den User) eine weitere Form aufrufen, wo Daten zur Bearbeitung eingegeben werden. Diese Daten müssen jetzt irgendwie an die andere Form zurück. Mit dem Form Closing Event verknüpfen und aus public Variablen abrufen geht nicht, weil die Form nicht geschlossen werden soll und der User weitere Daten eingeben kann.
Regelmäßiges Abfragen braucht einen kurzen Timer, weil der User im Minimalfall nur schnell in eine Textbox was kopieren muss und wenn der Timer z.B. 10 Sekunden ist und der User alle 3 Sekunden neue Daten eingibt gehen welche verloren, weil sie nicht rechtzeitig abgefragt werden. Ein kurzer Timer hätte jedoch den Nachteil, dass es CPU Ressourcen verbraucht.
Letzendlich werden die Daten in einer lokalen Datei gespeichert, aber regelmäßiges auslesen der Datei halte ich auch für Unsinn.

Die bisher sinnvollste Lösung erscheint mir, dass die Form von der anderen weiß und über eine Funktion die Daten übermittelt und die Verarbeitung startet.
Dies würde ich einfach machen, indem ich beim Aufrufen der Form den Parameter "this" als Form übergebe (Es darf nicht Form sein, sondern der Name der Form, sonst hat man kaum Zugriff).
Dies wäre auch praktisch in der Hinsicht, dass ich Daten durch Kommunikation zwischen den beiden Forms aktualisieren kann, ohne das sie neu aufgerufen werden muss.

Jedoch habe ich schon öfters gehört, dass Forms sich gegenseitig nicht kennen sollen. Für mich wäre es die einfachste Lösung und ich wüsste gerne weshalb das nicht sein soll. Alternativen sind natürlich auch immer gut :wink:
Eingefügtes Bild
0

Anzeige



#2 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 09. Mai 2008 - 20:27

Wieso legst du dir nicht für die Werte, die du der anderen Form mittelen willst, public Properties in deiner zweiten Form an, auf die du dann in der ersten Form zugreifen kannst. Da hab ich nicht wirklich verstanden, warum das nicht klappt.
Du könntest natürlich auch einfach deine Steuerelemente, auf die du von außen zugreifen willst, public deklarieren.
0

#3 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 09. Mai 2008 - 21:38

Der User soll ja Daten eingeben können (Form2). Diese müssen in Form1. Nur wann sollte Form1 die Daten abfragen? Sobald der User neue Eingaben macht sind die alten ja weg.
Eingefügtes Bild
0

#4 Mitglied ist offline   G.I.Joe 

  • Gruppe: aktive Mitglieder
  • Beiträge: 978
  • Beigetreten: 19. September 04
  • Reputation: 0

geschrieben 09. Mai 2008 - 21:46

Am besten trennst du Daten und GUI vollständig voneinander, alles andere ist nur extrem unsauber. Die GUI-Elemente werden über Änderungen an den Daten dann per Observer-Pattern informiert.
Auch lesenswert in dem Zusammenhang: Model-View-Control

Dieser Beitrag wurde von G.I.Joe bearbeitet: 09. Mai 2008 - 21:46

Eingefügtes Bild Eingefügtes Bild
0

#5 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 10. Mai 2008 - 14:01

Das heißt der User gibt Daten in Form2 ein, drückt nen Button, dann sollen die Daten nach Form1 geschickt werden, und er soll weitere Daten eingeben können oder wie? Wenn das so ist, dann kannst du auch den Konstruktor von Form2 so ändern, dass er Form1 als Parameter erhält. Dann kannst in Form2 auf Form1 zugreifen.
0

#6 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 12. Mai 2008 - 11:44

genau das ist ja meine Lösung, einfach this übergeben. Aber ich habe gelesen, dass zwei Klassen (Forms sind ja auch Klassen) nichts voneinander wisssen sollten.
Eingefügtes Bild
0

#7 Mitglied ist offline   christoph_hausner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 68
  • Beigetreten: 23. August 07
  • Reputation: 0

geschrieben 15. Mai 2008 - 20:20

Tja, wenns nun mal nicht anderst geht. :D Wenn sie nichts voneinander wissen ist es halt übersichtlicher. Aber ansonsten sehe ich da keine Nachteile.
0

#8 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 15. Mai 2008 - 20:46

Das bleibt trotzdem extremst unsauber, da die beiden Forms dadurch eine feste Beziehung haben. Dadurch wirst du später nie ohne weiteres diese beiden Forms trennen können.

Mach genau so wie Joe es vorgeschlagen, mit Hilfe des Observer-Patterns. Durch Änderungen der entsprechenden Daten werden die GUI-Elemente automatisch benachrichtigt. Der Trick ist, dass du an der entsprechenden Codestelle nicht weißt, um welche GUI-Elemente es sich eigentlich handelt (Hmm, das erinnert mich gerade an dependecy injection).
0

#9 Mitglied ist offline   LaberLu 

  • Gruppe: aktive Mitglieder
  • Beiträge: 244
  • Beigetreten: 15. November 04
  • Reputation: 0

geschrieben 17. Mai 2008 - 15:20

Ok, ich habe jetzt mal mein ganzes Programm neu gemacht wegen Umstrukturierung.
Hauptgrund war eigentlich, dass ich alle SQL Anweisungen zum Datenspeicherung lieber in einer Klasse haben wollte, aber das mache ich gleich mit.

Über Google konnte ich leider nichts gutes rausfinden und bei Wikipedia gibt es nur ein C++ Beispiel.
Das beste was ich gefunden habe war http://www.tutorials.de/forum/net-archiv/1...n-observer.html aber das verstehe ich nicht so ganz :wink:
Kann mir das jemand bitte verständlich erklären?


edit: Mir fällt auf, das noch etwas anderes fehlt: Die Form2 ruft noch eine andere Form auf, die die public Eigenschaften zugreifen muss, deren Referenz sich aber in Form1 befindet.

Dieser Beitrag wurde von LaberLu bearbeitet: 17. Mai 2008 - 18:16

Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

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