Winforms: Как предотвратить вертикальное изменение размера в VB.NET - PullRequest
3 голосов
/ 19 апреля 2010

Работа с winforms Мне интересно, есть ли какой-нибудь способ предотвратить вертикальное изменение размера формы. Я хотел бы разрешить пользователю изменять размеры формы во всех направлениях, кроме по вертикали. Более того, я хотел бы разрешить вертикальное изменение размера в направлении вверх, но не вниз.

Я попытался использовать максимальный размер, установив его в: Me.maximumsize = новый размер (0, me.height)

Я установил ширину в 0, потому что я хочу позволить пользователю изменять ширину формы.

К сожалению, это не работает.

Есть идеи?

Ответы [ 5 ]

8 голосов
/ 19 апреля 2010

Вы должны быть осторожны, чтобы позволить форме изменить размер при запуске. Необходим для масштабирования, необходимого на компьютере с другим параметром DPI для видео или другим системным размером шрифта. Или пользовательское переопределение, которое изменило высоту строки заголовка. Все это разбирается к моменту запуска события Load. Таким образом:

protected override void OnLoad(EventArgs e) {
  Screen scr = Screen.FromControl(this);
  this.MinimumSize = new Size(this.MinimumSize.Width, this.Height);
  this.MaximumSize = new Size(scr.WorkingArea.Width, this.Height);
}

Следующее, что вам нужно сделать, это исправить поведение курсора, когда пользователь перемещает его по краю окна, что позволяет изменить размер окна по вертикали. Это немного уродливо, вы должны перехватить сообщение WM_NCHITTEST с помощью WndProc и изменить возвращаемое значение сообщения:

protected override void WndProc(ref Message m) {
  base.WndProc(ref m);
  if (m.Msg == 0x84) {  // Trap WM_NCHITTEST
    switch (m.Result.ToInt32()) {
      case 12: m.Result = (IntPtr)2; break;  // HTTOP to HTCAPTION
      case 13: m.Result = (IntPtr)10; break; // etc..
      case 14: m.Result = (IntPtr)11; break;
      case 15: m.Result = (IntPtr)1; break;
      case 16: m.Result = (IntPtr)10; break;
      case 17: m.Result = (IntPtr)11; break;
    }
  }
}
3 голосов
/ 19 апреля 2010

Установите свойства максимального и минимального размера формы или напишите код ниже в Form_Load:

this.MaximumSize=new System.Drawing.Size(2048, 300);
this.MinimumSize=new System.Drawing.Size(0, 300);

Дайте одинаковую высоту обоим.

1 голос
/ 07 октября 2011

В большинстве случаев разработчик устанавливает размер from при разработке поэтому код будет

private void FormLogin_Load(object sender, EventArgs e)
{
     this.MaximumSize = this.Size;
     this.MinimumSize = this.Size;

}
1 голос
/ 19 апреля 2010

Есть несколько решений. Это просто:

Dim originalSize As Integer = Me.Height

Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    If Me.Height <> originalSize Then
        Me.Height = originalSize
    End If
End Sub

Имейте в виду, что размеры всегда уменьшаются, когда вы увеличиваете размер, то, что вы делаете, это изменяете местоположение формы и уменьшаете размер.

0 голосов
/ 19 апреля 2010

Зарегистрируйтесь на Control.Resize Событие и введите желаемую высоту.

...