C# Variablen in Form zurückgeben

Invalid_Name

Cadet 2nd Year
Registriert
Aug. 2013
Beiträge
29
Hi,

ich bin Anfänger in C# und bin dabei mein erstes kleines Programm ohne buch zu schreiben.

Jetzt stehe ich allerdings vor dem Problem, dass ich die variablen nicht zwischen meinen Forms austauschen kann. Leider haben die meisten Tutorials im Internet auch nicht geholfen, weil ich nicht Variablen zu einer neuen Form, sondern zu einer alten zurückgeben möchte.

Also hier der Ablauf der Programmteils:
1. Benutzer startet neues Spiel
2. Neues Fenster öffnet sich
3. Benutzer stellt Voreinstellungen für das Spiel im neuen Fenster ein
4. Neues Fenster übergibt die Startwerte AN DAS ALTE FENSTER und schließt sich danach
5. Das alte Fenster startet ein neues Spiel mit den erhaltenen variablen als Startwerte

Leider bekomm' ich halt die Variablen nicht ins alte Fenster.
Vielen Dank schonmal für Hilfe :)

Achso, bitte, bitte schreibt es so, das eure Antworten für jemanden verständlich sind, der sich nur ein Grundlagenbuch angeschaut hat... Also nichts kompliziertes oder wenn möglich mit Codebeispiel, damit ich was zum anschauen hab :) Danke an alle :)
 
Eigentlich haben ja solche Werte direkt in den Forms nichts zu suchen und sollten außerhalb in extra Klassen und Objekten liegen. Von dort werden sie dann bei Bedarf ausgelesen oder beschrieben.
Stichwort MVC. An dieses Design Pattern solltest du dich halten, da es das Programm sehr gut durchstrukturiert und megagroße und unübersichtliche Klassen (vor allem bei den Forms) verhindert.

Ist dir das Konzept der Objektorientierung vertraut?
 
Zuletzt bearbeitet:
Du kannst den Konstruktor der neuen Form so aufbauen dass du die alte Form als Objekt übergibst. In der alten Form machst du dann set-Methoden auf public und kannst die Werte dann durch den Aufruf AlteForm.setValues(...) innerhalb der neuen Form übergeben.
 
Wenn ich mich richtig erinnere musst du mit Delegates und dort mit der Funktion BeginInvoke() arbeiten - ist aber etwas her als ich mit Threads und C# gearbeitet habe.
 
@e-Laurin
Naja, ich will eigentlich nur 2 integer Variablen festlegen, ich denke da ist sowas nicht sinnvoll. Es geht darum die 2 Werte in die 1 Form zu schicken, um dort dann halt z.B. Die KI an/aus zu schalten, also nichts großartiges. Und ich denke für Tic Tac Toe (Mein erstes Programm halt :P ) ist sowas wie MVC halt überflüssig :)

LG
Ergänzung ()

@yetisports

Danke, ich probiers gleich mal aus. Meld mich dann obs funktioniert hat :)
 
Ich würde es eher umgedreht machen, Variablen in der neuen Form auf Public wie auch bspw. beim "OpenFileDialog".

Also machst du in der alten sowas:

PHP:
NeueForm neueform = new Neueform();
neueform.ShowDialog();

meinevariable = neueform.Einstellung1;

und in der neune:

PHP:
public int Einstellung1 { get; set; }
 
Zuletzt bearbeitet:
Ok, ich glaube ich bin zu blöd.
Jetzt zeig er mir die Fehlermeldung an, dass für "das nicht statische Feld, die Methode oder die Eigenschaft TicTacToe.Neues_Spiel.gegner.get" ein Objektverweis nötig ist.

Also hier der Code:
Haupformular:
Code:
// Dialog für neues Spiel öffnen
Neues_Spiel ng = new Neues_Spiel(this);
ng.ShowDialog();

if (Neues_Spiel.gegner == 1)
{
// Anweisung
}
int i = Neues_Spiel.gegner;
Neues Formular:
Code:
public int gegner { get; set; }

Das If und die Integer variable sind natürlich nur da, um zu sehen, ob das ganze funktioniert.
Wie kann ich jetzt einen Objektverweis erstellen?

LG
 
Die Property "gegner" ist nicht statisch, also kannst du auch nicht über die Klasse darauf zugreifen.
Neues_Spiel ist die Klasse, ng ist das Objekt der Klasse.
 
Wenn:
Code:
public int gegner { get; set; }

Dann:
Code:
Neues_Spiel ng = new Neues_Spiel(this);
ng.ShowDialog();

if (ng.gegner == 1)
{

}





Alternativ
Wenn:
public static int gegner { get; set; }

Dann:
Code:
Neues_Spiel ng = new Neues_Spiel(this);
ng.ShowDialog();
 
if (Neues_Spiel.gegner == 1) // 
{
// Anweisung
}



Wenn "gegner" static ist, dann existiert es nur 1x, egal wieviele Formulare du erstellst und öffnest. Du greifst dann auf "gegner" über den Namen der Klasse zu. Static verleitet Anfänger nur zum pfuschen - daher Finger weg!
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben