Laden...

Einstellungen übernehmen?

Erstellt von Schnabeltier vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.275 Views
S
Schnabeltier Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren
Einstellungen übernehmen?

Hallo zusammen,
ich versuche gerade rauszufinden wie ich Konfigurationseinstellungen abspeichern und wieder einlesen kann. Das klappt nun auch schon sehr gut. Nur habe ich ein kleines Problem, ich habe in meinem Programm eine extra Form für die Programmeinstellungen, wenn ich dort was ändere wird alles nach Wunsch gespeichert aber die geänderten Daten erscheinen dann nicht auf der "ersten" Form. Nun meine Frage, muss ich die Hauptform irgendwie "reloaden" damit sie mit den neuen Daten Aktualisiert wird? Die änderungen an den Einstellungen erscheinen sonst nur wenn ich das Programm neu starte und es soll ja sofort übernommen werden. Wäre super wenn ihr mir hier helfen könntet. Bin SEHR neu in diesem Bereich. 😉

MlG

6.903 Beiträge seit 2009
vor 13 Jahren

Hallo,

die geänderten Daten erscheinen dann nicht auf der "ersten" Form

Wie stellst du die Daten in der "ersten" Form dar?

Wenn du Daten-/Property-Bindung verwendest dann gehts automatisch und das wäre der zu bevorzugende Weg.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Schnabeltier Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Also ich lese es folgendermaßen aus auf der Hauptform.

lblNameText.Text = Properties.Settings.Default.Name;

Wenn ich nun aber auf der Form2 (die Form wo ich die Einstellungen mache) etwas ändere und mit einem Button so abspeichere

Properties.Settings.Default.Name = txtName.Text; 
Properties.Settings.Default.Save();
Close();

und wieder auf die Hauptform zurückkehre, sind die änderungen zwar in der xml gespeichert, allerdings werden die Daten auf der Hauptform nicht Aktualisiert. Dies passiert erst wenn ich das Programm neu starte und die xml neu eingelesen wird. Die änderungen sollen allerding schon nach dem schliessen der Einstellungsform übernommen werde.

MlG

6.903 Beiträge seit 2009
vor 13 Jahren

Hallo,

wie oben bereits erwähnt verwende besser den Bindungsmechanismus. Dann geht das automatisch. Siehe hierzu User Settings Applied. Dort wirds per Code gebunden. Es geht in VS aber auch mit dem Designer -> siehe angehängtes Bild.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Schnabeltier Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Ok, das funktioniert soweit, allerdings soll der "Name" in einem Satz stehen, also zb so.

lblNameText.Text = Properties.Settings.Default.Name + " alles schnickschnack, sample blubblah.";

Wie muss ich das denn machen wenn ich das über den Designer mache wie du vorgeschlagen hast? Denn wenn ich das nu so einstelle dann erscheint im Label auch wirklich nur der "Name" ohne den restlichen Text.

Und vielen dank für deine Mühe! 😃

6.903 Beiträge seit 2009
vor 13 Jahren

Hallo,

ich würde daraus 2 Labels machen - eines für den gebunden Text und das andere mit dem statischen Text - und diese beiden Labels in ein FlowLayoutPanel stecken. So hast du den Vorteil der Datenbindung.
Ob dieser Ansatz für WinForms ideal ist weiß ich aber nicht denn er ist an die Vorgehensweise von WPF angelehnt, aber es funktioniert 😉

Ohne Datenbindung kannst du das Label so lassen, aber mit dem Preis dass du die Eigenschaft erneut zuweisen musst. Sollte dies für mehrere Controls so sein dann erstell dir eine Methode welche diese Aufgabe übernimmt und diese wird nach dem ShowDialog für die andere Form aufgerufen.

Noch als Erklärung warum es nciht automatisch übernommen wird: Die Werte aus der Konfiguration welche den Controls zugewiesen werden sind Value-Types und somit wird bei jeder Wertänderung eine neue Instaz davon erstellt -> daher bekommt das Control die Änderung nicht mit (vergleiche hierzu das Verhalten von Referenztypen). Siehe auch [FAQ] Besonderheiten der String-Klasse (immutabler Referenztyp mit Wertsemantik)

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Schnabeltier Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Das Problem ist das ich in diesem Text nicht nur den "Namen" anzeigen lassen möchte sondern noch ein paar andere in den einstellungen gespeicherten Daten. Wie gesagt, ich kenne mich noch nicht so gut aus aber müsste es nicht sowas geben was mir nach dem drücken des "speichern" Knopfs auf Form2 das Hauptform "reloadet" das er die Daten Aktualisiert? Sonst müsste ich ja zb für einen Satz 5 Labels machen, ich kann mir nicht vorstellen das dies die einzige möglichkeit ist. 😉

*oder ich habe da was noch nicht so ganz verstanden* 😃

MlG

6.903 Beiträge seit 2009
vor 13 Jahren

Hallo,

*oder ich habe da was noch nicht so ganz verstanden* 😃

Scheint fast so 😉

Schau dir generell das Konzept der Datenbindung an. Stichworte hierzu sind auch INotifyPropertyChanged, MVP, ...

Für den Satz erstellst du in deiner Modell-Klasse (welche INotifyPropertyChanged implementiert) eine Eigenschaft "Satzt" und diese bindest du an das Label...

Hört sich vllt. aufwändig und kompliziert an, ist es aber nicht. Glaub mir: das erleichtert deine Arbeit.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
Schnabeltier Themenstarter:in
9 Beiträge seit 2010
vor 13 Jahren

Uhi, ich habe gerade mal etwas gegoogelt und muss sagen das mir das noch etwas zu krass ist. Dabei wollte ich doch nur ein paar sachen ausgeben lassen. Dachte nicht das das so Kompliziert ist. ;/

6.903 Beiträge seit 2009
vor 13 Jahren

Hallo,

das ist nicht kompliziert, sondern die korrekte Herangehensweise. Wenn du dich einmal eingearbeitet hast ist das viel einfacher 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"