Каскадные формы MDI панели Splitter - PullRequest
1 голос
/ 15 июня 2010

Я показываю мои окна MDI внутри основной формы, но в одной части панели сплиттера, например:

    Form2 f2= new Form2();
    f2.MdiParent = this;
    f2.Parent = this.splitContainer2.Panel2;
    f2.Show();

но проблема в том, что я не могу каскадировать их, если я напишу такой код:

this.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade);

«это» является родительской формой. основная форма.

Как я могу их каскадировать?

спасибо всем.

1 Ответ

0 голосов
/ 15 июня 2010

Вам придется переопределить LayoutEngine для панели SplitContainer.У Microsoft есть хороший пример здесь для создания пользовательского механизма разметки.

private void CascadeToolStripMenuItem_Click(object sender, EventArgs e) {
        //LayoutMdi(MdiLayout.Cascade);
        Rectangle bounding = this.splitContainer1.Panel1.DisplayRectangle;
        Point nextFormLocation = bounding.Location;
        foreach (Control c in this.splitContainer1.Panel1.Controls) {
            if (!c.Visible) {
                continue;
            }

            nextFormLocation.Offset(c.Margin.Left, c.Margin.Top);

            c.Location = nextFormLocation;
            c.BringToFront();

            if (c.AutoSize) {
                c.Size = c.GetPreferredSize(bounding.Size);
            }

            nextFormLocation.X = bounding.X + 20;

            nextFormLocation.Y = bounding.Y + 20;

        }
    }

, просто добавьте приведенный выше код к кнопке каскада, и вы получите основы каскада.

...