Button auf MDI-Form
-
Hi...
kleine Frage und zwar hab ich mir eine Form als MDI-Container angelegt.
Allerdings wäre es schön, wenn die Buttons die auf der MDI-Fläche liegen hinter den Fenstern die in die MDI-Form erzeugt werden liegen.Ist das möglich, bzw. wie ist das möglich ?
mfg
ToMjAcK
-
hmm wenn ein ChildWindow sichtbar gemacht wird könntest Du Code in das entsprechend ChildWindow einbauen der die Z-Order der entsprechenden Button
verändert dann ruecken diese Button in den Hintergrund so müsste das möglich sein!?! Probiers mal aus!Gibt da so ne Methode namens BringToFront, man muss es ja auch irgendwi in den Hintergrund bringen koennen
-
oder wenn ein entsprechendes ChildWindow da ist ruf von allen Button
im entsprechenden Sichbereich deren Methode Hide auf!
-
Erstmal danke für die Antwort !
Mit den BringToFront und SendToBack Methoden hab ich das schon versucht.
Wenn ich ein SendToBack mache verschwinden die Buttons komplett von der MDI-Fläche (was ich eigentlich nicht will, sie sollten nur unter dem ChildWindow liegen), bei einem BringToFront sind diese wieder Sichtbar und entsprechend wieder immer im Vordergrund.Viel interessanter ist deine zweite Antwort, meine Frage hierzu wie stelle ich den Sichtbereich fest ??
Aktuelle Position + Grösse des Childfenster, das verrechnen mit der MDI-Form-Grösse und dann irgendwie den Sichtbarkeitsbereich berechnen ?
Stell ich mir ziemlich kompliziert vor !?
Bzw. wie mach ich das wenn nur ein Teil der ChildForm über dem Button liegt, d.h. dieser nur halb sichtbar sein soll.Läuft das vlt. darauf hinaus das ich einen Tod sterben muss ?
-
Hier erstmal ein Bsp.: Zur Verwendung von SendToBack und BringToFront
Im MDI-Child-Fenster ueberlädst Du die Closing-Methode
// Im Child-Window suchen wir während des Schliessen den weggeschickten Button und bringen ihn wieder in den Vordergrund private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if(this.MdiParent.MdiChildren.Length == 1) foreach(Control ctrl in this.MdiParent.Controls) { if(ctrl is Button) if((ctrl as Button).Name == "button1") { (ctrl as Button).BringToFront(); break; // Schleife verlassen die anderen Controls brauchen wir nicht } } }
Der Parent-MDI-Window sollte ja ähnlich aussehen wie bei mir:
// ein Button im Parent-Window der nach hinten geschickt wird und ein MDI-Child aufmacht private void button1_Click(object sender, System.EventArgs e) { button1.SendToBack(); Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show(); }
-
Tomjack schrieb:
Erstmal danke für die Antwort !
Mit den BringToFront und SendToBack Methoden hab ich das schon versucht.
Wenn ich ein SendToBack mache verschwinden die Buttons komplett von der MDI-Fläche (was ich eigentlich nicht will, sie sollten nur unter dem ChildWindow liegen), bei einem BringToFront sind diese wieder Sichtbar und entsprechend wieder immer im Vordergrund.Viel interessanter ist deine zweite Antwort, meine Frage hierzu wie stelle ich den Sichtbereich fest ??
Aktuelle Position + Grösse des Childfenster, das verrechnen mit der MDI-Form-Grösse und dann irgendwie den Sichtbarkeitsbereich berechnen ?
Stell ich mir ziemlich kompliziert vor !?
Bzw. wie mach ich das wenn nur ein Teil der ChildForm über dem Button liegt, d.h. dieser nur halb sichtbar sein soll.Läuft das vlt. darauf hinaus das ich einen Tod sterben muss ?
Aber Hide/Show hätte bei der Anwendung den gleichen Effekt wie SendToBack und BringToFront!
Das einfachste wäre immernoch Du machst aus deinem Hauptwindow keinen ChildContainer und rufst die anderen Formulare als moduslose Fenster auf per
Show.Dann baust Du Dir ne Collection wo Du alle moduslosen aufgemachten Fenster sammelst, damit Du diese bei Closing des Hauptformular alle in einer Schleife abräumen kannst!
Das Problem ist Du willst das sich die StandardButton nicht wie Knöpfe verhalten sondern wie Fenster!!!
Hmm habe ich mom weiter keine Ahnung ich könnte Dir raten leite ein Cotrol ab was ein neuer Button mit eben diesen Eigenschaften sein soll. Sicher nicht die beste Variante es geht sicher auch einfacher. Die Frage ist ob man dieses Verhalten eines Button wirklich so braucht. Allenthalben würde ich zu der Variante mit den Moduslosen Dialogen desweiteren raten.
-
"ich könnte Dir raten leite ein Cotrol ab was ein neuer Button mit eben diesen Eigenschaften sein soll"
An das hab ich auch schon gedacht, so würde es wohl gehen.
Ich schau mir jetzt erstmal deine Codesnippets an, die man sicherlich (wenn nicht hier dann woanders :-)) verwenden kann !Danke für deine Hilfe !