当前位置 : 主页 > 编程语言 > c语言 >

Winforms:如何防止在VB.NET中垂直调整大小

来源:互联网 收集:自由互联 发布时间:2021-06-24
使用 winforms我想知道是否有某种方法可以防止垂直调整表单大小.我想允许用户在垂直方向上的所有方向上调整表单大小.另外我想允许在向上方向上垂直调整大小,但不允许向下调整大小
使用 winforms我想知道是否有某种方法可以防止垂直调整表单大小.我想允许用户在垂直方向上的所有方向上调整表单大小.另外我想允许在向上方向上垂直调整大小,但不允许向下调整大小.

我尝试使用maximumsize将其设置为:Me.maximumsize = new size(0,me.height)

我将宽度设置为0,因为我想允许用户更改表单宽度.

不幸的是它不起作用.

有任何想法吗?

您必须小心允许表单在启动时调整自身大小.必须适应具有不同视频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);
}

您应该做的下一件事是当用户在窗口边缘移动光标时,修复光标的行为,允许垂直调整窗口大小.这有点难看,您必须使用WndProc捕获WM_NCHITTEST消息并更改消息返回值:

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;
    }
  }
}
网友评论