2010-07-09 8 views
23

Ich schreibe eine benutzerdefinierte TextBox, die beim Fokussieren den Rahmenstil ändert.So legen Sie die Z-Reihenfolge eines Controls mit WinForms fest

Beim Hinzufügen eines Rahmens wird das Steuerelement mit den benachbarten überlappend verschoben. Ich bringe das Textfeld vorübergehend an die Vorderseite des Dialogfelds (unter Verwendung von textBox.BringToFront()).

Sobald jedoch die Bearbeitung abgeschlossen ist und der Fokus verloren ist, möchte ich das Steuerelement zurück in die ursprüngliche Position in der Z-Reihenfolge senden.

Ist das möglich (vorzugsweise in eine einfache Art und Weise!)

Antwort

33

Rufen Sie die GetChildIndex und SetChildIndex Methoden der Controls Sammlung der Eltern.

+1

Großen - die Irre geführt durch BringToFront() Ich sah an der falschen Stelle für diese Methoden: Bei der Methoden der Kontrolle, nicht die Methoden der Kontrollen der Eltern . Vielen Dank. –

+2

gibt es kein Beispiel –

+0

Keine Notwendigkeit Beispiel, die Antwort es selbst es ist genug! – Caverna

16

Es gibt keine Z-Reihenfolge wie in VB, aber Sie können die Methoden GetChildIndex und SetChildIndex verwenden, um ihre Indizes manuell abzurufen und festzulegen.

Here Es gibt ein Beispiel für die Verwendung. Sie müssen wahrscheinlich eine Aufzeichnung jedes Indexes der Kontrollen behalten, damit Sie es zurückstellen können, wenn es fertig ist.

So etwas ist wahrscheinlich, was Sie nach:

// Get the controls index 
int zIndex = parentControl.Controls.GetChildIndex(textBox); 
// Bring it to the front 
textBox.BringToFront(); 
// Do something... 
// Then send it back again 
parentControl.Controls.SetChildIndex(textBox, zIndex); 
+2

Alles ändert sich, wenn Sie die Steuerelemente (in) dynamisch sichtbar machen. Setzen Sie 'textbox.Visible = true' und es wird den Index 0 haben. Erledigt ignoriert die Reihenfolge aus der Dokumentgliederung. Das hat mich eine Weile gedauert :) – FrankyHollywood

+0

Ich versuchte es auch herauszufinden. Dieser Kommentar hat mir geholfen. Danke –