Benutzer mit den meisten Antworten
Mit WPF eine Form laden und WPF schließen

Frage
-
Hallo Community,
leider konnte ich mit Google nichts finden was mir weiterhilft..
Ich habe ein Programm als WPF (W-FORM), welches in gewissen Zeitabständen nach veränderten Dateien prüft. Wenn dies der Fall ist, wird ein neues Windows.Formular (U-FORM) gestartet an dem die Liste der Dateien von W-FORM übergeben wird. Dieses Formular soll dann eine Art Update durchführen. Hierbei muss W-FORM geschlossen werden. Wenn ich das allerdings mache, dann schließen alle Formen. Hier der Code-Auschnitt:
//Code wird in W-Form ausgeführt:
public bool StartUpdate { set { if (value == true) { List<WGLUpdater.FilePool> files = new List<WGLUpdater.FilePool> { new WGLUpdater.FilePool { source = ".\\pool\\file1", target = ".\\programm\\file1" } }; WGLUpdater.UPTForm uForm = new WGLUpdater.UPTForm(files); uForm.Show();
this.Close(); } else { } } }
Könnte mir jemand ein paar Tipps geben?
Vorab vielen Dank !
Gruß John
Antworten
-
Hallo JohnPlrz,
In Deinem Codeausschnitt ist kein privates Feld zu sehen, dem in der set-Zugriffsmethode (set-Accessor) der Wert von value (wenn auch nach Überprüfung der Bedingung) zugewiesen wird. Hast Du eins und wenn ja, wie wird ihm ein Wert zugewiesen?
Wenn Du keins deklariert hast, beachte, dass ein privates Feld vom Compiler generiert wird. Das folgende ist eher ein Schuss ins Blaue, aber im Hinblick auf Deinen Code bietet sich die Frage an, ob Du es mit einer StartUpdate-Methode, die einen booleschen Parameter akzeptiert und an der geeigneten Stelle aufgerufen wird, versucht hast?public void StartUpdate(bool start) { if(start == true) { //.... } else { //... } }
Wenn Du es bei einer Eigenschaft belassen möchtest, aber kein privates Feld brauchst und den Wert nur durch Klassenmitglieder zuweisen möchtest, kommt ein private set in Frage. Wenn Du nur im Konstruktor den Wert zuweisen möchtest, kannst Du die set-Zugriffsmethode auslassen. Sieh Dir dazu diese Threads an:
C# properties: how to use custom set property without private field? (zweite Antwort)
C# Property with no setter - how can it get set from constructor?
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 22. April 2020 13:40
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 30. April 2020 09:36
Alle Antworten
-
Hallo JohnPlrz,
In Deinem Codeausschnitt ist kein privates Feld zu sehen, dem in der set-Zugriffsmethode (set-Accessor) der Wert von value (wenn auch nach Überprüfung der Bedingung) zugewiesen wird. Hast Du eins und wenn ja, wie wird ihm ein Wert zugewiesen?
Wenn Du keins deklariert hast, beachte, dass ein privates Feld vom Compiler generiert wird. Das folgende ist eher ein Schuss ins Blaue, aber im Hinblick auf Deinen Code bietet sich die Frage an, ob Du es mit einer StartUpdate-Methode, die einen booleschen Parameter akzeptiert und an der geeigneten Stelle aufgerufen wird, versucht hast?public void StartUpdate(bool start) { if(start == true) { //.... } else { //... } }
Wenn Du es bei einer Eigenschaft belassen möchtest, aber kein privates Feld brauchst und den Wert nur durch Klassenmitglieder zuweisen möchtest, kommt ein private set in Frage. Wenn Du nur im Konstruktor den Wert zuweisen möchtest, kannst Du die set-Zugriffsmethode auslassen. Sieh Dir dazu diese Threads an:
C# properties: how to use custom set property without private field? (zweite Antwort)
C# Property with no setter - how can it get set from constructor?
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort vorgeschlagen Ivan DragovMicrosoft contingent staff, Moderator Mittwoch, 22. April 2020 13:40
- Als Antwort markiert Ivan DragovMicrosoft contingent staff, Moderator Donnerstag, 30. April 2020 09:36
-
Hallo Dimitar,
danke für deine Antwort. Aber ich habe es wahrscheinlich falsch formuliert. Ich möchte gerne die zweite Form (U-Form) unabhängig von der ersten machen. Stand jetzt ist, wenn ich W-Form schließe, schließen beiden Formen. Das möchte ich aber nicht. Es soll nur W-Form geschlossen werden.
Der obere Code-Ausschnitt ist nicht vollständig ;-)
Gruß John
-
Hallo John,
Dein W-Form ist das Hauptformular der Anwendung, das U-Form ist ein untergeordnetes. Wenn das Hautformular geschlossen wird, wird immer die gesamte Anwendung beendet. Man müsste deshalb zur Laufzeit das U-Formular zum Hauptformular erklären. Ob gas geht entzieht sich meiner Kenntnis.
Ich würde für Dein Problem auf 2 Anwendungen aufteilen. Wenn die W-Anwendung Änderungen feststellt, wird die U-Anwendung gestartet und die W-Anwendung geschlossen. Die Daten kannst Du per Parameter, Zwischenablage oder Datei übergeben.
Gruß Klaus
-
Hallo Klaus,
hierbei handelt es sich bereits um zwei verschiedene Anwendungen. Das U-Formular liegt als Verweis dem W-Formular vor und übergebe wie oben im Code-Ausschnitt (WGLUpdater.UPTForm uForm = new WGLUpdater.UPTForm(files);) zu sehen Parameter. In dem Fall "files".
Gruß
John
-
Hallo John,
uForm wird ja in Deinem Code-Ausschnitt im W-Form deklariert, und ist demzufolge auch ein Objekt von W-Form und wird mit dessen Beendigung auch beendet.
Wenn U-Form eine 2. Anwendung ist, würde ich sie wie folgt in einem neuen Prozess starten:
string Parameter = ".\\pool\\file1,.\\programm\\file1";
Process.Start("C:\\...\UForm.exe", Parameter);
Ich hoff ich habe Dein Problem jetzt richtig verstanden.
Gruß Klaus
-