vb.net - 如何防止在 VB.NET Windows 窗体中垂直调整大小

标签 vb.net winforms resize

使用 Windows 窗体,我想知道是否有某种方法可以防止垂直调整窗体的大小。我想允许用户在除垂直之外的所有方向上调整表单的大小。此外,我想允许向上垂直调整大小,但不能向下调整。

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

我将宽度设置为 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;
    }
  }
}

关于vb.net - 如何防止在 VB.NET Windows 窗体中垂直调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2666788/

相关文章:

vb.net - 上传文件到服务器时WinSCP错误 "No such file"

vb.net - 在尝试执行转换之前确定转换是否有效

c# - 如何返回 Visual Studio 当前打开的 sotion 目录

c# - 自定义属性的构造函数何时运行?

c# - 如何设置图表栏的宽度?

c# - "Switching"标签中的文本

C# 如何在 Debug模式下从另一个 clickonce winforms 项目启动 clickonce winforms 项目

javascript - jQuery Fluid div 动态高度

delphi - 如何在使用 ScaleBy() 后将 delphi TForm 重置为原始外观

matlab - 在 matlab 中更改电影尺寸