Как ограничить высоту Sytem.Windows.Form точным значением? - PullRequest
1 голос
/ 19 сентября 2008

То, чего я пытаюсь достичь, - это форма, на которой есть кнопка, которая заставляет форму «выпадать» и увеличиваться, отображая больше информации. Моя текущая попытка такая:

private void btnExpand_Click(object sender, EventArgs e)
{
    if (btnExpand.Text == ">")
    {
        btnExpand.Text = "<";
        _expanded = true;
        this.MinimumSize = new Size(1, 300);
        this.MaximumSize = new Size(int.MaxValue, 300);
    }
    else
    {
        btnExpand.Text = ">";
        _expanded = false;
        this.MinimumSize = new Size(1, 104);
        this.MaximumSize = new Size(int.MaxValue, 104);
    }
}

Что прекрасно работает! За исключением одной маленькой детали ... Обратите внимание, что значения ширины должны быть в состоянии от 1 до int.MaxValue? Ну, на практике они идут от этого. Ширина к int. MaxValue, т.е. Вы можете сделать форму больше, но никогда не уменьшать снова. Я в недоумении, почему это произойдет. У кого-нибудь есть идеи?

Для справки: я также пробовал обработчик Form.Resize, который устанавливал одинаковое значение для высоты формы в зависимости от того, что было установлено в логическом _expanded, но в итоге я получил тот же побочный эффект.

PS: я использую .NET 3.5 в Visual Studio 2008. Приветствуются и другие решения, но я подумал о том, как это «сделать» и как я пытался это сделать.

Редактировать: кажется, что код работает, согласно принятому ответу ответа. Если у кого-то еще есть проблемы с этой конкретной проблемой, проверьте свойство AutoSize вашей формы, оно должно быть ЛОЖНЫМ, а не ИСТИНОЙ. (Это значение по умолчанию, но я включил его, так как раньше использовал форму и метку с автоматическим изменением размера для отображения отладочной информации ранее)

Ответы [ 2 ]

1 голос
/ 19 сентября 2008

Согласно документам, используйте 0, чтобы обозначить максимальный или минимальный размер. То есть, я только что попробовал, и 0 вообще не понравилось. Поэтому я использовал int.MaxValue, как и вы, и это сработало. Какую версию фреймворка вы используете?

0 голосов
/ 19 сентября 2008

На самом деле, если взглянуть на MinimumSize и MaximumSize (.NET 3.5) в отражателе, становится совершенно ясно, что разработанное поведение не совсем то, что предлагают документы. Есть некоторые минимальные ограничения ширины, определенные из вспомогательного класса, и 0 не имеет особого значения (то есть без ограничений.

Еще одно замечание. В приведенном выше коде я вижу, что вы расширяетесь или сжимаетесь на основе текстового значения вашей кнопки. Это плохая идея, если кто-то приходит позже и меняет текст в конструкторе, говоря: «Развернуть "вместо <не глядя на ваш код, он будет иметь неожиданный побочный эффект, предположительно, у вас есть какой-то код, который изменяет текст кнопки, было бы лучше иметь где-нибудь переменную состояния и включить ее. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...