Я работаю над устаревшим приложением WinForms MDI, и у меня возникли проблемы с тем, чтобы дочерние формы вели себя так, как я хочу.
Моя цель - максимизировать дочернюю форму всегда (закреплена).
Проблема в том, что даже если я установлю MaximizeBox
на false
, кнопка максимизации / изменения размера появится в панели инструментов MDIs и позволит пользователю изменить размер (открепить) дочернюю форму.
Единственный способ избежать этого - установить ControlBox
на false
, но затем кнопка закрытия исчезнет (это не то, что я хочу).
Я уже пытался использовать фиксированный FormBorderStyle
и максимизировать дочернюю форму при запуске события resize, но ни один из моих подходов не сработал.
Есть ли какое-то сверхсекретное свойство, которое я пропустил или это просто невозможно?
С наилучшими пожеланиями и заранее спасибо
Обновление
Я написал унылый метод (спасибо @rfresia) для обработки моей дочерней формы, он может помочь другим, кто сталкивается с той же проблемой:
//All child forms derive from ChildForm
//Parent MDI Form implementation
//...
private void ShowForm(ChildForm form)
{
//Check if an instance of the form already exists
if (Forms.Any(x => x.GetType() == form.GetType()))
{
var f = Forms.First(x => x.GetType() == form.GetType());
f.Focus();
f.WindowState = FormWindowState.Maximized;
}
else
{
//Set the necessary properties (any other properties are set to default values)
form.MdiParent = this;
form.MaximizeBox = false;
form.MinimizeBox = false;
form.WindowState = FormWindowState.Maximized;
Forms.Add(form);
form.Forms = Forms;
form.Show();
form.Focus();
//Lets make it nasty (some forms aren't rendered properly otherwise)
form.WindowState = FormWindowState.Normal;
form.WindowState = FormWindowState.Maximized;
}
}
//...
//ChildForm implementation
//...
public List<Form> Forms { get; set; }
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
Forms.RemoveAll(x => x.GetType() == GetType());
}
protected override void OnResize(EventArgs e)
{
WindowState = FormWindowState.Maximized;
}