使用winforms我不知道是否有一些方法來防止垂直調整窗體的大小。我希望允許用戶在除了垂直方向以外的所有方向上調整窗體大小。此外,我希望允許用戶向上方向垂直調整大小,但不允許向下調整大小。Winforms:如何防止垂直調整大小VB.NET
我曾嘗試將其設置爲使用MAXIMUMSIZE:Me.maximumsize =新的大小(0,me.height)
我設置寬度爲0,因爲我想允許用戶改變形式寬度。
不幸的是它不起作用。
任何想法?
使用winforms我不知道是否有一些方法來防止垂直調整窗體的大小。我希望允許用戶在除了垂直方向以外的所有方向上調整窗體大小。此外,我希望允許用戶向上方向垂直調整大小,但不允許向下調整大小。Winforms:如何防止垂直調整大小VB.NET
我曾嘗試將其設置爲使用MAXIMUMSIZE:Me.maximumsize =新的大小(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;
}
}
}
有幾種解決方案。一個簡單的一個是這樣的:
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
有記住,調整大小總是向下,當你調整了一下,你正在做的是改變表單的位置和調整下來。
好主意檢查是否需要修改高度,因爲高度更改會導致另一個Resize事件被觸發,依此類推。如果沒有「if」,你會陷入無限循環。 – 2010-04-19 11:09:35
好的解決方案,但在我的情況下,唯一的問題是,我將不得不在不同的點更新originalSize變量,它不是很舒服。但是你的解決方案很好!謝謝 – user304602 2010-04-19 14:36:28
您可以創建一個自定義屬性來更新表單的大小,並同時更新originalSize變量。 – 2010-04-20 06:39:51
註冊Control.Resize
事件並執行您想要的高度。
設置窗體的最大&最小尺寸的屬性或寫下面的代碼時的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;
}
優秀的樣品!這正是我想要的。這裏還有其他一些很好的解決方案,但我認爲這是最符合我需求的方案。有了這個,我可以完全控制所有調整方向。偉大的代碼片段! 但有一點,我有疑問......我想知道如果我可以將消息返回值更改爲我想要的值。是否重要,你返回或不是?你能回到任何一個嗎?爲什麼你返回這些值而不是其他值? 非常感謝! – user304602 2010-04-22 16:00:57
查看WM_NCHITTEST的MSDN文檔。 http://msdn.microsoft.com/en-us/library/ms645618%28VS.85%29.aspx – 2010-04-22 16:12:27
另請參閱http://stackoverflow.com/a/2140908/521757以獲得更好的API。 – jnm2 2013-10-28 12:48:24