C#:Как изменить регион, содержащий дочерние элементы MDI?
Вопрос
При создании родительского элемента MDI вся "внутренняя часть" формы становится областью MDI.
Если вы добавляете menustrip к родительскому MDI, область MDI немного уменьшается, чтобы освободить место для menustrip.
Но если вы добавите панель в верхнюю часть родительского MDI-файла, вся внутренняя часть по-прежнему будет областью MDI.Это означает, что вы можете переместить дочерние элементы MDI за панель и скрыть строку их заголовка.Если вы переместите дочерние элементы MDI за полосу меню, появятся полосы прокрутки, и вы можете прокрутить их выше, чтобы получить доступ к строке заголовка.Но полосы прокрутки не отображаются, когда вы используете панель вместо menustrip.Я полагаю, потому, что регион MDI не знает об этой панели.
Как я могу масштабировать область MDI, чтобы она начиналась ниже заданного значения Y?
Решение
Короче говоря, вы не можете изменить окно MDI parent / container в .Net.Окно все еще там, и вы можете найти его с помощью Win32 apis, если действительно захотите.
Однако то, что вы описываете как свою цель, вполне выполнимо.Поскольку нет никакого кода, я не могу сказать, что вы делаете неправильно, но следующее демонстрирует эту работу:
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();
}
}
Другие советы
Если csharptest.net верно, и нельзя изменить регион MDI, я нашел два способа сделать это:
- Добавьте несколько объектов MenuStrip (каждый из них перемещает область MDI на 24 пикселя ниже родительской формы).
- Используйте событие LocationChanged дочерних элементов MDI и вручную проверьте, что их значение Y больше границы, под которой вы хотите их сохранить.