在使用Windows Forms时,我想知道是否有一种方法可以防止窗体垂直调整大小。我希望用户可以在所有方向上调整窗体大小,除了垂直方向。此外,我希望允许向上垂直调整大小,但不允许向下。
我曾尝试使用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;
}
}
}
设置表单的最大和最小大小属性,或在Form_Load下编写以下代码:
this.MaximumSize=new System.Drawing.Size(2048, 300);
this.MinimumSize=new System.Drawing.Size(0, 300);
使两者高度相同。
大多数情况下,开发人员在设计时设置了表单大小,因此代码应该是:
private void FormLogin_Load(object sender, EventArgs e)
{
this.MaximumSize = this.Size;
this.MinimumSize = this.Size;
}
有几种解决方案。其中一个简单的方法是:
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