C # Скажите, если форма максимизирует - PullRequest
1 голос
/ 02 июня 2009

Хорошо, вот моя проблема. У меня есть форма, которая, когда она не развернута, максимальный размер должен быть общей высотой компонентов внутри формы. Чтобы добиться этого, я использую это:

    private void resize_form(object sender, EventArgs e)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }

Это срабатывает при изменении размера формы. Поскольку размер компонента всегда меняется, имеет смысл сделать это для события resize. Как бы то ни было, если я хочу максимизировать форму, форма просто переходит к самым высоким настройкам, определенным в this.MaximumSize. Поэтому мне было интересно, есть ли способ определить, когда форма будет развернута, и установить ее максимальный размер в пределах экрана до того, как форма развернется.

Если есть лучший способ изменить значение максимального размера без события изменения размера, это также было бы здорово:)

Ответы [ 5 ]

7 голосов
/ 02 июня 2009

Вам все еще нужно использовать событие изменения размера, но отметьте WindowState:

if (this.WindowState == FormWindowState.Maximized)
{
    // Do your stuff
}

Как указывает yshuditelu, вы также можете установить свойство минимального размера вашей формы - что должно, в сочетании с разумным использованием значений привязки, означать, что оно никогда не будет слишком сильно сокращаться, а когда оно действительно растет, компоненты будут перемещаться и / или расти по мере необходимости.

3 голосов
/ 02 июня 2009

Я нашел ответ, который подходит мне идеально. Lil WndProc переопределить: D (теперь я люблю WndProc)

protected override void WndProc(ref Message message)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MAXIMIZE = 0xF030; 

    switch (message.Msg)
    {
        case WM_SYSCOMMAND:
            int command = message.WParam.ToInt32() & 0xfff0;
            if (command == SC_MAXIMIZE) 
            {
                this.maximize = true;
                this.MaximumSize = new System.Drawing.Size(0, 0);
            }
            break;
    }

    base.WndProc(ref message);
}

private void resize_form(object sender, EventArgs e)
{
    if (!maximize)
    {
        this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
    }
}

По сути, он устанавливает this.maximize в true, когда получает сообщение SC_MAXIMIZE. Событие resize будет устанавливать новый MaximumSize только в том случае, если this.maximize имеет значение false. Отличный xD

2 голосов
/ 02 июня 2009

Вы уверены, что не хотите устанавливать свойство MinimumSize ? Если вы установите для MinimumSize размер всех меток, то форма никогда не будет меньше этой. Но он может расти до любого размера, который хочет пользователь, при условии, что он больше минимального.

0 голосов
/ 18 октября 2017

Если пользователь нажимает в верхней панели, он может изменить размер окна, поэтому я использую это:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Normal)
    {
        this.WindowState = FormWindowState.Maximized;
    }
}
0 голосов
/ 02 июня 2009

Проверьте класс System.Windows.Forms.Screen . Получите экран из соответствующей точки (для обработки случая нескольких месяцев), а затем получите его разрешение.

Это должно работать вместе с другим комментарием о проверке FormWindowState.Maximized.

...