Hallo,
Ziel ist es aus meiner dll heraus ein Form aufzurufen und zu schließen und zwar über das GUI einer anderen Applikation, welche die dll nutzt.
Meine dll beginnt wie folgt:
public class DLLName : Basis
{
private FormF FormObj = new FormF();
FormObj.Visible = false;
[Display(GroupName = "Form")]
public bool ShowForm
{
get => _formonoff;
set
{
_formonoff = value;
RaisePropertyChanged("ShowForm");
//Recalculates all values if one indicator propery is changed
RecalculateValues();
}
}
Constructor ...
if (_formonoff == true)
{
FormObj = new FormF();
}
else
{
FormObj.Close();
}
...
}
Frage 1:
Sobal _formoff = true (Ceckbox im GUI) erscheint das Form, aber warum, bisher wurde ja nach meinem Verständnis lediglich das FormObj instantiiert mittels new und das Form noch gar nicht gestartet (kein weiterer Formcode sonst vorhanden).
Frage 2:
Das Form kann zusätzlich mittels CheckBox im GUI geschlossen werden (haken entfernen).
Wenn ich das Form nun aber GUI-unabhängig schließe (oben rechts X im Form) bleibt im GUI das Setting davon jedoch natürlich unberührt (CheckBox mit Haken), es weiß ja nichts davon.
Wie und idealerweise auch wo in der dll Klasse kann nun erkannt werden, dass das Form bereits geschlossen wurde ?
Frage3:
Ist das FormObj durch das Schließen per X damit gelöscht und muss neu erzeugt werden, oder ist es nur "unsichtbar" ?
Suchst Du vielleicht die Methode Show von Form?
Du kannst im Endeffekt das Schließen ein Form durch Events abonnieren; und Du musst Dir alle Forms, die existieren, merken.
Zum Beispiel durch das Form.Closing-Event. Du bekommst hier aber nichts von Windows oder vom Framework geschenkt. Verwaltest Du Forms, dann bist Du in der Verantwortlichkeit eben das zu tun: verwalten.
Schließen einer Form allein räumt keine Abhängigkeiten, die Du selbst verwaltest, auf.
Wie gesagt: Du bist in der vollen Verantwortlichkeit für das Lifecycle jeder Form respektive jeder Instanz.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ja Show istr mir bekannt, Visible auch, aber was ich nicht verstehe ist, dass mein Form schon sichtbar wird, wenn ich es instantiiere, also ohne Show und Visible jemals genutzt zu haben.
was ich nicht verstehe ist, dass mein Form schon sichtbar wird, wenn ich es instantiiere, also ohne Show und Visible jemals genutzt zu haben
Weil Du Show benutzt hast.
Die Form zeigt sich nicht von alleine an, es muss Code geben, der das tut.
Oder Du hast irgendwas anderes, was das tut (ein externes Framework?), aber WinForms macht es nicht von alleine.
Am besten Du debuggst einfach durch deinen Code, dann findest Du schon die Stelle.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.