Autor |
Beitrag |
chip777
      
Beiträge: 127
Win 7 Prof
C# VS 2008
|
Verfasst: Mo 19.04.10 13:25
Hier der Link auf den Thread wie man Daten von einer aufrufenden Form zur aufgerufenen bekommt:
www.c-sharp-forum.de/viewtopic.php?t=99033
Aber wie bekomme ich Daten zurück zur Form die aufgerufen hat? Ich hab schon viel im Internet gesucht, auch in der MSDN, aber entweder hab ich es nicht verstanden, oder es war nicht das richtige dabei.
Einige schreiben von Events, andere von Properties. Wäre super wenn mir das jmd etwas erklären könnte.
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mo 19.04.10 13:41
Das kannst du über eine Referenz auf eine einfachen (out-Parameter) Datentype machen oder über eine komplexe Datenstruktur (die automatisch als Referenz übergeben wird) - sprich einer Klasse.
Konfigurationsklasse:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| public class ProjectSettings { public string Path { get; set; }
public override ToString() { return string.Format("Path: {0}", Path); } } |
Anwendungsklasse:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| ProjectSettings ps = new ProjectSettings{ Path = @"C:\Projects"; };
BfwEditor editorForm = new BfwEditor(ps);
editorForm.Show();
MessageBox.Show("Path: " + editorForm.ProjectSettings); |
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 19.04.10 15:14
chip777 hat folgendes geschrieben : | Einige schreiben von Events, andere von Properties. Wäre super wenn mir das jmd etwas erklären könnte. |
danielf ist schon über das Minimalbeispiel hinaus in Richtung (View-)Models gegangen, aber allgemein gilt: Wenn du Show benutzt und sich die Forms live beeinflussen sollen, brauchst du Events. Wenn du ShowDialog benutzt, brauchst du Properties. Worum geht's  ?
_________________ >λ=
|
|
chip777 
      
Beiträge: 127
Win 7 Prof
C# VS 2008
|
Verfasst: Mo 19.04.10 15:20
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 19.04.10 15:23
Sicher, dass dann nicht ein modaler Dialog besser geeignet wäre? Ich höre die Windows-Design-Guidelines im Hintergrund kreischen...  .
_________________ >λ=
|
|
chip777 
      
Beiträge: 127
Win 7 Prof
C# VS 2008
|
Verfasst: Mo 19.04.10 15:29
Kha hat folgendes geschrieben : | Sicher, dass dann nicht ein modaler Dialog besser geeignet wäre? Ich höre die Windows-Design-Guidelines im Hintergrund kreischen... . |
Kann schon sein das das besser ist, aber um das feststellen zu können, müsstest du mir vorher mal sage was ein modaler Dialog ist.
Ich bin noch ziemlich neu in der objektorientierten C# Windows Programmierung. Aber für mein Praxissemester während meines Studiums muss ich mich da bisschen reinfinden, dass Problem ist, dass mein Betreuer auch noch nciht viel Ahnung von C# hat und ich so quasi immer nur im Internet nach Infos suchen kann.
Ich hab jetzt ca. 6 Monate Zeit ein ziemlich umfangreiches Programm zu schreiben, und da bin ich natürlich für jede Hilfe dankbar um das Programm schneller, effizienter, und übersichtlicher zu machen.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 19.04.10 15:51
chip777 hat folgendes geschrieben : | Kann schon sein das das besser ist, aber um das feststellen zu können, müsstest du mir vorher mal sage was ein modaler Dialog ist. |
Das ist der mit ShowDialog statt Show  . Gerade Dialoge für Optionen etc. sollten unbedingt modal angezeigt werden, und das wird zum Glück auch von wirklich fast jedem Programm befolgt.
chip777 hat folgendes geschrieben : | Ich hab jetzt ca. 6 Monate Zeit ein ziemlich umfangreiches Programm zu schreiben, und da bin ich natürlich für jede Hilfe dankbar um das Programm schneller, effizienter, und übersichtlicher zu machen. |
Ich denke, da bist du bei uns an der richtigen Adresse  .
_________________ >λ=
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Mo 19.04.10 16:53
Ja der ShowDialog sollte natürlich die Erweiterung zu meinem Ansatz sein.
Damit du dann später Änderungen an der Klasse vornehmen kannst, diese aber erst bei OK übernimmst.
Sprich:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| MeineSettings settings = new MeineSettings(); ... MeinSettings copy = settings.Clone(); SettingsForm settingsFOrm = new SettingsForm(copy); if (settingsForm.ShowDialog == DialogResult.OK) { settings = copy; } |
|
|
chip777 
      
Beiträge: 127
Win 7 Prof
C# VS 2008
|
Verfasst: Di 20.04.10 11:33
Ich muss sagen ich hab dein Beispiel leider noch nicht so ganz verstanden -.-
Wie wäre es vielleicht mit einem einfacherem Beispiel?
Im konkreten Fall will ich aus meiner form main heraus ein neues fenster öffnen:
C#-Quelltext 1: 2:
| ProjektWizard myForm = new ProjektWizard(); myForm.ShowDialog(); |
In dieser Form werden einige Eingaben gemacht, diese werden in einer Datei gespeichert. Ich würde jetzt gerne 2 Variablen aus der 2ten Form(also dem ProjektWizard) wieder in die main form übergeben.
Könntest du mir dafür vielleicht nochmal ein paar Zeilen Code schreiben? Ich denke an einem konkreten Beispeil versteh ich es vielleicht besser.
Martin
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Di 20.04.10 11:50
Ich dachte das war ein konkretes Beispiel
Dann nochmal einen Versuche ....
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| MeineSettings settings = new MeineSettings(); ... MeinSettings copy = settings.Clone(); SettingsForm settingsFOrm = new SettingsForm(copy); if (settingsForm.ShowDialog == DialogResult.OK) { settings = copy; } |
Das Grundgerüst steht.... SettingsForm würdest du nun durch dein ProjektWizard ersetzen.
Was du dabei angezeigt haben willst regelst du a) in der MeineSettings-Klasse (Daten) und b) in der SettingsForm (Anzeige).
Sprich die MeinSettings könnte so aussehen:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public class MeinSettings : ICloneable { public string Path { get; set; } public string Name { get; set; }
public Object Clone() { MeinSettings ms = new MeinSettings { Path = this.Path, Name = this.Name }; } } |
In der View SettingsForm musst du nun eine Möglichkeit anbieten, wie man die Daten bearbeiten kann.
Das schnellste wäre ein Form mit einem PropertyGrid, welchem du dann das MeinSettings Objekt als DataSource zuweist.
Viel Erfolg
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 20.04.10 15:50
|
|