Laden...

Problem mit "Enabled" bei Forms

Erstellt von coreina vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.640 Views
C
coreina Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren
Problem mit "Enabled" bei Forms

Erstmal Hallo, das ist hier mein Erster Beitrag.
Ich bin aber nicht nur hier neu, sondern auch in der C# Programmierung.
Zu meinem Problem konnte ich nach mehreren Stunden und Suchen nichts konkretes finden (auch nicht auf dieser Seite). Es kann natürlich sein (und ist auch wahrscheinlich) dass die Lösung auf der Hand liegt, wenn ja, bitte ich um entschuldigung 🙂

Ich habe 2 Forms und will beim beim Laden der 2.Form, dass man nichts mehr auf der Ersten machen kann. Ich habe es probiert mit:


Form1.ActiveForm.Enabled = false;

Hat auch super geklappt.Auch als ich den Wert beim Schließen wieder auf "true" gab es keine Fehlermeldung. Was aber passiert ist als ich es ausprobiert habe:
Die Erste Form ist auch verschwunden...
Was mache ich falsch? Wie kann ich das Problem beheben?

M
97 Beiträge seit 2004
vor 17 Jahren

Hallo und herzlich Willkommen bei mycsharp.de 🙂

Bin mir nicht sicher, ob die Eigenschaft Enabled das richtige ist. Wie rufst du das zweite Form auf?

Wenn du

Dialog2.ShowDialog();

verwendest anstatt

Dialog2.Show();

müsstest du eigentlich den gewünschten Effekt erreichen. Dadurch kann der Fokus/Cursor nicht mehr aufs erste Form plaziert werden, solange das zweite offen ist.

Ist aber ohne Gewähr, habe leider seit ein par Monaten nichts mehr mit C# zu tun...

Gruss
MAjbO

187 Beiträge seit 2005
vor 17 Jahren

Bei mehreren Formularen sollte man wenn möglich immer die ShowDialog() Methode verwenden. Das Enablen und Disablen des aufrufenden Formulars ist ne heikle angelegenheit

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen,

mit ShowDialog ist es zwar schön einfach zu programmieren, aber die damit erzeugen modalen Dialoge sind nicht mehr Stand der Kunst.

Auf der anderen Seite ist natürlich wahr, dass das Disablen des "Hauptforms" quasi zu einem modalen Dialog führt, nur auf unübliche Weise. Dann schon besser ShowDialog. Noch besser ist es aber, auf nicht modale Dialoge zu setzen.

Hallo coreina,

ich wüsste keinen Grund, warum das Disablen eines Forms, dieses auch verstecken sollte. Wenn das Form verschwindet, liegt es sicher nicht an dem Enabled = false.

herbivore

187 Beiträge seit 2005
vor 17 Jahren

Hallo herbivore,

in wiefern meinst du nicht mehr stand der kunst?

C
coreina Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren

Wow, das geht hier aber schnell mit den Antworten 👍
@ MAjb0 & Vassili :
Stimmt, so funktioniert es. Ganz schön unübersichtlich, am Anfang. Da such ich stundenlang herum und es war nur die falsche Methode...

@herbivore:
Da hast du Recht, das war nicht das Problem, ich hab nur übersehen, dass das Fenster ganz in den Hintergrund gewandert ist. Was nicht funktioniert hat, war das "wieder-enablen", das Fenster ist Disabled geblieben.
Eine Ahnung wieso das so sein könnte?

@ MAjb0, Vassili & herbivore:
Ich glaub ich muss euch in meinem Programm erwähnen
Special Thanks to...oder so ähnlich 😉

coreina dankt!

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Vassili,

nimm zum Beispiel Einstellungsdialoge. Früher waren die immer modal und haben verhindert, dass man während der Änderung der Einstellungen das "Hauptfenster" bedient und sei es nur, um das Hauptfenster zur Seite zu schieben. Heute sind die Einstellungsdialoge oft und besser nicht modal, denn es stört ja nichts, wenn man zwischendurch eine Aktion mit dem Hauptfenster durchführt. Außerdem haben die Einstellungsdialoge heute oft einen Übernehmen-Knopf, um die Änderungen zu übernehmen, ohne den Einstellungsdialog zu schließen. Wenn man jetzt die Wirklung der Änderungen begutachten will, ist es oft notwendig eine Aktion im Hauptfenster durchzuführen, obwohl der Einstellungsdialog noch offen ist. Es ist also für den Benutzer komfortabler, mit nicht modalen Dialogen zu arbeiten, weil diese ihn weniger behindern.

Wenn man möchte, dass der Einstellungsdialog während der Benutzung des Hauptfensters nicht im Hintergrund verschwindet, kann man Form.Owner benutzen.

Selbst in Situationen, in denen der Dialog nur eine einzige Eingabe verlangt (z.B. einen Dateinamen z.B. beim Speichern), würde ich nicht modale Dialoge bevorzugen, weil es nach meiner Erfahrung oft vorkommt, dass man im Hauptfenster nochmal schnell irgendwas nachgucken muss, um diese Eingabe tätigen zu können.

Hallo coreina,

ein Form wieder zu enablen sollte kein Problem sein. Ich vermute, du hast einfach Enable für die falsche Form aufgerufen.

herbivore

_
227 Beiträge seit 2006
vor 17 Jahren

Hallo,
prinzipiell finde ich nicht modale Fenster auch besser, nur wie mache ich das in einer MDI anwendung, wenn ich von einem Fenster (a) ein neues öffne(b) um da zu "Unterpunkten" zu gelangen dass das fenster a nicht geschlosssen werden kann solange b geöffnet ist?
Muss man manuell sicherstellen, denn das mit dem owner funktioniert bei mdi doch nicht oder?