C #: Как изменить регион, содержащий детей с ДИ? - PullRequest
0 голосов
/ 08 октября 2009

При создании родителя MDI вся «внутренняя часть» формы становится областью MDI.

Если вы добавляете menustrip к родителю MDI, область MDI немного уменьшается, чтобы освободить место для menustrip.

Но если вы добавите панель в верхней части родительского элемента MDI, вся внутренняя часть все равно останется областью MDI. Это означает, что вы можете переместить дочерних элементов MDI за панель и скрыть их строку заголовка. Если вы перемещаете дочерние элементы MDI за полосой меню, появляются полосы прокрутки, и вы можете прокручиваться выше, чтобы получить доступ к строке заголовка. Но полосы прокрутки не появляются, когда вы используете панель вместо меню. Полагаю, что регион MDI не знает о панели.

Как мне масштабировать регион MDI, чтобы он начинал ниже заданного значения Y?

Ответы [ 2 ]

0 голосов
/ 08 октября 2009

Если csharptest.net прав и нельзя изменить регион MDI, я нашел два способа сделать это:

  1. Добавление нескольких объектов MenuStrip (каждый из них перемещает область MDI на 24 пикселя ниже в родительской форме).
  2. Используйте событие LocationChanged дочерних элементов MDI и вручную проверьте, что их значение Y больше границы, которую вы хотите оставить ниже.
0 голосов
/ 08 октября 2009

Ну, в общем, вы не можете изменить родительское / контейнерное окно MDI в .Net. Окно все еще там, и вы можете найти его с Win32 API, если вы действительно хотите.

Однако то, что вы описываете как свою цель, выполнимо. Поскольку нет никакого кода, я не могу сказать, что вы делаете неправильно, но следующее демонстрирует эту работу:

public class Form1 : Form
{
    static void Main(string[] args) { Application.Run(new Form1()); }

    public Form1()
    {
        this.IsMdiContainer = true;
        Panel test = new Panel();
        test.Dock = DockStyle.Top;
        test.Height = 100;
        this.Controls.Add(test);

        Form child = new Form();
        child.MdiParent = this;
        child.Text = "Child";
        child.Show();
    }
}
...