2 Stimmen

Auflistung der Elemente von .Net-Steuerelementen generisch (MenuStrip, ToolStrip, StatusStrip)

Ich habe einige Code, der generell alle Steuerelemente in einem Formular erhalten und sie in einer Liste platzieren wird. Hier ist ein Teil des Codes:

        private List GetControlList(Form parentForm)
        {
            List controlList = new List();
            AddControlsToList(parentForm.Controls, controlList);

            return controlList;
        }

        private void AddControlsToList(Control.ControlCollection rootControls, List controlList)
        {
            foreach (Control c in rootControls)
            {
                controlList.Add(c);
                if (c.HasChildren)
                    AddControlsToList(c.Controls, controlList);
                //
            }
        }

Also kann ich nur c.HasChildren verwenden, um zu überprüfen, ob es noch weitere untergeordnete Steuerelemente von diesem Stammsteuerelement gibt.

Was ist mit einem MenuStrip, ToolStrip und StatusStrip? Wie erhalte ich alle Steuerelemente, die sich generell in diesen Steuerelementen befinden? Z.B. MenuStripItem

Ich weiß, dass ich versuchen könnte, den c.GetType() == typeof(MenuStrip) zu testen, aber ich hatte gehofft, keine spezifischen Typentests durchführen zu müssen.

Wenn ich mehr Informationen geben muss, fragen Sie bitte.

Vielen Dank

0voto

NotMe Punkte 86089

Die Elemente wie ToolStripItem usw. sind eigentlich keine Steuerelemente, sondern einfach Komponenten, die eine ToolStrip oder MenuStrip ausmachen.

Das bedeutet, dass wenn Sie diese Komponenten in Ihrer flachen Liste von Steuerelementen einschließen möchten, müssen Sie die spezifischen Überprüfungen durchführen.

0voto

Joshua Tacoma Punkte 408

ToolStripControlHost könnte ein Control enthalten:

if (c is ToolStrip)
    foreach (ToolStripItem item in EnumerateTree(c, "Items"))
        if (item is ToolStripControlHost)
            AddControlsToList(
                new Control[] { ((ToolStripControlHost)item).Control },
                controlList);

...das gilt, wenn Sie Argument 1 in den Typ IEnumerable ändern und Ihre eigene EnumerateTree-Funktion schreiben (ich denke, es ist großartig, eine gute generische EnumerateTree-Methode zu haben).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X