Autor Beitrag
chip777
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 19.04.10 15:14 
user profile iconchip777 hat folgendes geschrieben Zum zitierten Posting springen:
Einige schreiben von Events, andere von Properties. Wäre super wenn mir das jmd etwas erklären könnte.
user profile icondanielf 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 19.04.10 15:20 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconchip777 hat folgendes geschrieben Zum zitierten Posting springen:
Einige schreiben von Events, andere von Properties. Wäre super wenn mir das jmd etwas erklären könnte.
user profile icondanielf 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 ;) ?


Live sollen sie sich nicht beeinflussen, wenn das zweite aufgerufen wurde, dann wird da etwas eingegeben und dann wird es wieder beendet, danach brauch ich dann erst die Daten aus diesem.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: Mo 19.04.10 15:29 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 19.04.10 15:51 
user profile iconchip777 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconchip777 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 127

Win 7 Prof
C# VS 2008
BeitragVerfasst: 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:

ausblenden C#-Quelltext
1:
2:
ProjektWizard myForm = new ProjektWizard(); //Form erstellen  
            myForm.ShowDialog(); //anzeigen


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Di 20.04.10 11:50 
Ich dachte das war ein konkretes Beispiel ;)

Dann nochmal einen Versuche ....

ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 20.04.10 15:50 
user profile iconchip777 hat folgendes geschrieben Zum zitierten Posting springen:
Ich muss sagen ich hab dein Beispiel leider noch nicht so ganz verstanden -.-
Wie wäre es vielleicht mit einem einfacherem Beispiel?
Daniels Gerüst ist für Einstellungen wirklich wunderbar geeignet[*], aber um es ganz einfach zu halten:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
class SubForm : Form
{
  ...
  public string Foo { get { return fooTextBox.Text; } }
}

ausblenden C#-Quelltext
1:
2:
3:
using (var form = new SubForm) // !
  if (form.ShowDialog() == DialogResult.OK)
    DoSomethingWith(form.Foo);


[*]Clone würde ich ohne ICloneable implementieren, das Interface hätte nie in die BCL gelangen dürfen ;) .

_________________
>λ=