Laden...

Form1 sperren wenn Form2 drüber liegt.

Erstellt von keving vor 13 Jahren Letzter Beitrag vor 13 Jahren 5.124 Views
K
keving Themenstarter:in
21 Beiträge seit 2008
vor 13 Jahren
Form1 sperren wenn Form2 drüber liegt.

In vielen Programm ist es ja so, das wenn eine 2te Form aufgeht, die 1te nicht mehr anklickbar ist. (Die 2te blickt dann).

Das würde Ich gerne auch machen wenn das überhaupt möglich ist 😉

Weiß ja auch nicht unter welches Stichwort das fällt sonst hätt ich mal gegoogelt 😉

mfg keving

R
69 Beiträge seit 2009
vor 13 Jahren

hi,

form.ShowDialog glaube ich...

mfg ron

Gelöschter Account
vor 13 Jahren

.Showdialog istschon das was du suchst, nur ist das nciht mehr zeitgemäß...

besser ist;


this.Enabled = false;
mynewForm2.FormClosing += MySuperClosingEventhandler;
mynewForm2.Show();

...

MySuperClosingEventhandler(object sender, ....)
{
this.Enabled = true;
((Form)sender).FormClosing -= MySuperClosingEventhandler;
}

so erreichst du das der user die unterliegende form1 noch verschieben kann (was bei dem dialogverfahren nicht mehr geht) aber keine eingaben mehr tätigen kann.

edit: wieder abmelden vergessen...

K
keving Themenstarter:in
21 Beiträge seit 2008
vor 13 Jahren

Enable gibts garnicht in einer Form, Es gibt nur Enabled.
Korregier mich wenn Ich mich irre.

Gelöschter Account
vor 13 Jahren

Enable gibts garnicht in einer Form, Es gibt nur Enabled.

ja ist doch egal... im wesentlichen hsat du es aber verstanden oder?... ich tipp die sachen nciht immer in die IDE rein um zu prüfen ob sie auch 100% korrekt sind...

K
keving Themenstarter:in
21 Beiträge seit 2008
vor 13 Jahren

Ja klar hab Ich es in dem Sinne verstanden 😄

K
keving Themenstarter:in
21 Beiträge seit 2008
vor 13 Jahren

Edit: Es war ShowDialog welches gesucht wurde. Auch wenn es nicht zeitgemäß ist, es ist genau das was ich gesucht habe.

@ronny: thx

S
211 Beiträge seit 2010
vor 13 Jahren

.
so erreichst du das der user die unterliegende form1 noch verschieben kann (was bei dem dialogverfahren nicht mehr geht) aber keine eingaben mehr tätigen kann.

Da ich bisher selber nur mit showDialog() gearbeitet habe, hab ich eben mal deine Event Lösung umgesetzt. Allerdings ist auch bei dieser Lösung das "gesperrte" Form völlig tot.
Also das lässt sich bei mir auch nicht mehr verschieben.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo scrabbl,

das liegt daran, dass das Form als ganzes disabled wird. Wenn man nur die Controls, die sich darin befinden, disabled, geht es so, wie JAck30lena es beschrieben hat.

foreach (Control ctrl in Controls) {
   ctrl.Enabled = false;
}

herbivore

S
211 Beiträge seit 2010
vor 13 Jahren

Ah, macht Sinn, so gehts dann auch, danke.

P
660 Beiträge seit 2008
vor 13 Jahren

du kannst auch ein panel nehmen es an die form docken. also Dockstyle oder fill.client (habe den befehl grade nicht im kopf). dann platzierst du alle controls auf das panel und de/aktivierst nur den panel. das sparrt dir dann eine schleife

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

Gelöschter Account
vor 13 Jahren

hm.. stimmt.. das habe ich nciht bedacht... allerdings muss man aufpassen.. denn wenn bereits vorher controls enabled=false waren, sind die nacher wieder true und das könnte unerwünschte nebeneffekte hervorbringen...

daher hier ein code der sogar diesen fall berücksichtig:

            Form mynewForm = new Form();
            var disabledControls = (from Control c in Controls where !c.Enabled select c).ToArray();
            foreach (Control c in Controls) c.Enabled = false;
            mynewForm.FormClosing += (s, a) =>
                                         {
                                             foreach (Control c in Controls)
                                                 c.Enabled = !disabledControls.Contains(c);
                                         };
            mynewForm.Show(this);

wie man sieht, ist das nicht wirklich mehr aufwand als showdialog...

edit: das .ToArray() vergessen...

2.082 Beiträge seit 2005
vor 13 Jahren

Hallo Leute,

man kann sich das Leben auch schwer machen 😃 warum nicht einfach ein Panel in die Form legen, die alle Controls beinhaltet und nur dieses Panel disablen...

Man könnte sich auch eine CustomForm bauen die immer ein Panel beinhaltet.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

771 Beiträge seit 2009
vor 13 Jahren

Man sollte dann noch beachten, daß man evtl. das Main- sowie Kontextmenü des Hauptformulars auch noch zwischenzeitlich disablen sollte (da diese keine Controls sind sondern direkt von Component abgeleitet sind)...

Gelöschter Account
vor 13 Jahren

mei meiner variante muss man das nciht beachten, da das menu ein control ist und das context menu bei controls, die disabled sind, nciht erscheint.

S
211 Beiträge seit 2010
vor 13 Jahren

Jop,

oder wenn ich nicht möchte das der User auf dem anderen Forum rumdrückt und aber möchte das ers noch verschieben kann, wenns im Weg ist, dann geht doch auch einfach:

this.Visible = false

Damit isses sicher vor Eingaben und auch garaniert nirgends im Weg 😉)))

Gelöschter Account
vor 13 Jahren

ja... hat aber den nachteil das der user nicht sieht, was er vorher gemacht hat und warum das aktuelle fenster überhaupt offen ist.... und er kann auch keine daten mehr von der vorigen form kopieren, wenn er möchte...

M
91 Beiträge seit 2008
vor 13 Jahren

Nur Interesshalber, warum ist denn .Showdialog nichtmehr zeitgemäßg im Gegensatz zu der Methode die JAck30lena gepostet hat? Nur deshalb weil man dann die Form1 nichtmehr verschieben kann oder hat das noch einen anderen Grund?

1.665 Beiträge seit 2006
vor 13 Jahren

ShowDialog() blockiert die ganze Anwendung.
ShowDialog(<CallerForm>) sollte da Abhilfe verschaffen, wenn ich noch recht weiß. Das blockiert dann nur die aufrufende Form.

Gelöschter Account
vor 13 Jahren

@JunkyXL:
nein. das übergeben der aufrufenden instanz soll nur verhindern, das der aufgerufene dialog nicht hinter den aufrufer (der ja blockiert ist) verschwindet und somit nicht mehr bedient werden kann.

allerdings funktioniert das nciht in allen fällen...