Разворачивание формы и запрет пользователю изменять размер формы

Я пытаюсь создать максимально расширенную форму, не позволяя пользователю изменять ее размер. Я попытался развернуть FormWindowState и удалить кнопку свертывания и развертывания. Установив this.MimimumSize и this.MaximumSize на this.Size (максимальный размер), это должно учитывать максимальную форму.

Тем не менее, когда я запускаю его, форма становится действительно маленьким квадратом. Любые мысли о том, как я могу это исправить?

public partial class Testscherm : Form
{
    public Testscherm()
    {
        this.WindowState = FormWindowState.Maximized;
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
        this.MinimumSize = this.Size;
        this.MaximumSize = this.Size;
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        InitializeComponent();
    }
}

person Luuk van Driel    schedule 22.11.2019    source источник


Ответы (1)


Попробуйте сначала вызвать InitializeComponent(), затем добавить любые операторы, которые изменяют атрибуты/свойства формы. В противном случае сгенерированный дизайнером код может отменить любые изменения, внесенные вами ранее.

Во-вторых, Form.Size не передает размер формы в развернутом состоянии. Вместо этого вы могли бы перебрать

System.Windows.Forms.Screen.AllScreens

затем получите фактический размер экрана по строкам

System.Windows.Forms.Screen.AllScreens.First().WorkingArea.Size;

и назначьте его this.Size;

Другая проблема заключается в том, что как только вы назначаете это this.MaximizeBox = false, Winforms запрещает WindowState быть FormWindowState.Maximized. Это явно "по замыслу". То, что вы, вероятно, хотите здесь, это использовать

 this.FormBorderStyle = FormBorderStyle.None;

который не только удаляет кнопки максимума и минимума, но и кнопку закрытия. Если вам нужна такая кнопка, подумайте о том, чтобы добавить в окно собственную кнопку закрытия.

Все это вместе дает

        InitializeComponent();
        this.WindowState = FormWindowState.Maximized;
        this.FormBorderStyle = FormBorderStyle.None;
        this.Size = System.Windows.Forms.Screen.AllScreens.First().WorkingArea.Size;
        this.MinimumSize = this.Size;
        this.MaximumSize = this.Size;

Но: вы уверены, что это хорошая идея, что вы там пытаетесь? Как это будет вести себя, например, на машине с двумя мониторами разного разрешения? Это может быть нормально для программы, которая использует определенное оборудование и работает как специальное программное обеспечение, которое берет на себя исключительно управление машиной (что-то вроде Режим киоска). Обратите внимание, что окно по-прежнему можно перемещать с помощью определенных Win-<Key> сочетаний клавиш.

person Doc Brown    schedule 22.11.2019
comment
Конечно, это имеет смысл! Тем не менее, когда я устанавливаю MaximumSize и Minimumsize после InitializeComponent(), форма снова не максимизируется. Есть предположения? - person Luuk van Driel; 22.11.2019
comment
Спасибо, что дали мне некоторое представление о фактической логике, стоящей за этим, и заставили меня задуматься о том, как правильно структурировать это, а не давать прямое решение. Это поможет мне понять основы C#! - person Luuk van Driel; 22.11.2019