Развернуть дочернюю форму MDI

Я работаю над устаревшим 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;
}
9
задан Jay 6 January 2012 в 23:55
поделиться