Laden...

Informationen speichern beim wechseln der Form

Erstellt von az96 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.595 Views
A
az96 Themenstarter:in
3 Beiträge seit 2017
vor 6 Jahren
Informationen speichern beim wechseln der Form

Hallo,
Ich habe 2 Forms nennen wir sie A und B

Form A :
hat checkboxen zum ankreuzen
hat ein button der zu Form B wechselt :

 
new FormB().Show();
this.Hide();  

Form B:
Hat ein button der zu A wechselt :

 
new FormA().Show();
this.Hide();  

Das Problem:
beim wechseln zu Form B , geht die Information verloren, dass ich Checkboxen bei Form A angekreuzt habe...
Kann ich das ändern , dass auch wenn ich die Form wechsel, er immer noch weiß welche Checkboxen ich angehakt habe?

286 Beiträge seit 2011
vor 6 Jahren

=>
[FAQ] Kommunikation von 2 Forms

Wenn die beiden Formen in keiner Parent-Child-Beziehung stehen kannst du es trotzdem über Events lösen oder über eine statische Variable:


public static class MyDataStorage
{
    public static bool checkboxFormAChecked {get;set;}
    public static bool checkboxFormBChecked {get;set;}
}

2+2=5( (für extrem große Werte von 2)

A
az96 Themenstarter:in
3 Beiträge seit 2017
vor 6 Jahren

Hey,
danke für deine Antwort. Könntest du mir erklären was eine "Parent/Chield Relationship" ist und wie das bei meinem Problem helfen würde? ( am bestem mit einfachen Worten)
Da ich vor ungefähr 1 Monat erst angefangen habe und mir das schritt für schritt selber beibringe

3.170 Beiträge seit 2006
vor 6 Jahren

Hallo,

oder über eine statische Variable

Bitte nicht. Das löst jedenfalls nicht das Problem, das beim gezeigten Code vom TE beim hin- und herwechseln ständig neue Instanzen der Forms erstellt werden.

@az96: Genau das ist nämlich Dein Problem. Die Instanz, die Du aus FormB mit new FormA() erstellst, ist eben eine neue Instanz, und hat keine Ahnung davon, dass in einer anderen Instanz derselben Klasse irgendein Haken gesetzt wurde.
Dabei handelt es sich um Grundlagen, die wir hier voraussetzen.

Da ich vor ungefähr 1 Monat erst angefangen habe und mir das schritt für schritt selber beibringe

Dazu eignet sich am besten ein Buch, z.B. das im Menü links verlinkte openbook: Visual C#.
Auch hier findest Du hilfreiche Informationen: [FAQ] Wie finde ich den Einstieg in C#?

Wenn man einmal ein solches Grundlagenbuch durch hat, stellen sich solche Fragen i.d.R. nicht mehr.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

A
az96 Themenstarter:in
3 Beiträge seit 2017
vor 6 Jahren

Hey,
@MarsStein danke für deine Antwort 😃
Ja ich habe ein Buch, aber für mich selber finde ich es am besten nicht alles von A bis Z zu lernen.
Ich habe sehr viel Spaß daran, meine Idee die ich im Kopf habe umzusetzen und ich google mir
eigentlich alles. Nur hier wusste ich nicht wie ich das googlen sollte.

Tut mir leid, dass ich zu wenig wissen für das Forum habe, dann werde ich aufhören hier Thread's zu erstellen

3.170 Beiträge seit 2006
vor 6 Jahren

Hallo,

bitte versteh das nicht falsch, Du hast ja schließlich im Grundlagenforum gepostet, und da sind solche Fragen (zumindest in meinen Augen) schon OK 🙂
Mit den genannten Informationen solltest Du Dich dann aber halt erst mal auseinandersetzen.
Den Kern des Problems habe ich Dir ja genannt, und in dem Link von emuu wird auch beschrieben, wie man sowas löst.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

78 Beiträge seit 2016
vor 6 Jahren

Jeder fängt mal an. Grundsätzlich ist es nicht verkehrt das genannt Buch zu "überfliegen".

Aber MarsStein hat schon recht. Vielleicht ist es besser nicht jedesmal eine neue Instanz zu erstellen.
Grundsätzlich gibt bei der Entwicklung mit C# und .NET (gilt übrigens auch für andere Sprachen) viele nützliche Pattern.
Eines davon ist, wenn man seine Geschäftslogik, deine Modelle und deine Datenhaltung von der GUI trennt (irgendwann wird dir sicherlich mal MVVM, MVC ... über den Weg laufen)

Hier mal ein paar Denkanstöße

Die Semantik die hinter der Checkbox steckt, könnte auch in einer separate Klasse implementiert werden.

z.B.:


    public class MeineDaten
    {
        public bool Eigenschaft1 { get; set; }

        public bool Eigenschaft2 { get; set; }
    }

Wenn in deiner Applikation nun EINE Instanz deiner Klasse MeineDaten verfügbar ist, dann kannst du diese Klasse deiner GUI übergeben. Das ist der erste Weg deine Software etwas "aufgeräumter" zu gestallten. Ob nun deine GUI-Instanzen neu erzeugt werden, oder wiederverwendet werden, spielt dann keine Rolle.

Aber versuch static zu verhindern.

...und irgendwann wird sicherlich deine Software mit 7 Layern mit DI, SoC, UnitTest, MVVM/MVC/.., Services, MessageBus, REST, WebAPI, GraphQL, Logging, X-Platform, im Docker, SPA-Frotend, in der Cloud bestehen.

Ich wünsch euch allen ein schönes Wochenende! 😃 > docker kill ...

http://dotnet-paderborn.azurewebsites.net/

3.170 Beiträge seit 2006
vor 6 Jahren

Hallo,

Ob nun deine GUI-Instanzen neu erzeugt werden, oder wiederverwendet werden, spielt dann keine Rolle. Natürlich spielt das eine Rolle, vor allem wenn die Instanzen nicht mit Close geschlossen, sondern mit Hide versteckt werden - die bleiben ja dann erst mal im Speicher rumliegen, und das ist zumindest unschön wenn nicht sogar schlicht falsch.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

286 Beiträge seit 2011
vor 6 Jahren

Grundsätzlich gibt bei der Entwicklung mit C# und .NET (gilt übrigens auch für andere Sprachen) viele nützliche Pattern.
Eines davon ist, wenn man seine Geschäftslogik, deine Modelle und deine Datenhaltung von der GUI trennt (irgendwann wird dir sicherlich mal MVVM, MVC ... über den Weg laufen)

Gerade damit würde ich nachdem ich die absoluten Basics gelernt habe sogar anfangen. Gerade wenn man eher autodidaktisch als geführt lernt verrennt man sich da ganz schnell und muss dann das "gelernte" wieder über den Haufen treten. Vor allem was Konventionen, Prinzipien und Architekturen angeht: Lieber vorher lernen als später.

2+2=5( (für extrem große Werte von 2)

78 Beiträge seit 2016
vor 6 Jahren

Natürlich spielt das eine Rolle, vor allem wenn die Instanzen nicht mit Close geschlossen, sondern mit Hide versteckt werden - die bleiben ja dann erst mal im Speicher rumliegen, und das ist zumindest unschön wenn nicht sogar schlicht falsch.

Da hat MarsStein natürlich recht. Das Hide hatte ich glatt überlesen.

http://dotnet-paderborn.azurewebsites.net/