Я работаю над устаревшим MDI-приложением WinForms, и у меня есть некоторые проблемы с тем, чтобы дочерние формы работали так, как я хочу. Моя цель - сделать так, чтобы дочерняя форма всегда была развернута (закреплена).
Проблема в том, что даже если я установил для MaximizeBox
значение false
, на панели инструментов MDI появляется кнопка увеличения / изменения размера, позволяющая пользователю изменять размер (откреплять) дочернюю форму.
Единственный способ избежать этого - установить ControlBox
на false
, но затем кнопка закрытия исчезнет (это не то, что я хочу).
Я уже пытался использовать фиксированный FormBorderStyle
и максимизировать дочернюю форму при срабатывании события изменения размера, но ни один из моих подходов не помог.
Есть ли какое-то сверхсекретное свойство, которое я пропустил, или это просто невозможно?
С уважением и заранее спасибо
Я написал хитрый метод (спасибо @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;
}