2011-09-09 45 views
1

我正在尋找工作,看起來像是WinForms或Win32中的錯誤。我有一個方法來定位表單之前它顯示,但是當我顯示它的ControlBox設置爲false的窗體的高度減少,切斷一些控件。當ControlBox爲false並且位置已設置時,表格高度被削減

重現此步驟的步驟是在設計器中將ControlBox設置爲false(刪除關閉/最小化/最大化按鈕)並且文本是非空字符串(標題欄不會被刪除),然後在創建窗體後的代碼在調用Show/ShowDialog之前將Location屬性設置爲某個值。

問題似乎是高度正在改變,如果文本是空的(無標題欄)。如果我手動編輯* .designer.cs並在設置文本後設置ControlBox 的值,則問題消失。但是手動更改生成的代碼似乎不適用於維護。

我試圖在更改位置之前在代碼中將ControlBox設置爲true,我試圖在設置位置之前保存高度(返回的高度是較短的值),並且在設置位置之前嘗試使窗體無效它吸收了文本填寫的事實。這些似乎都不能糾正糟糕的身高值。在反射器中,我設法跟蹤正在發生的事情,在設置了一些表單樣式值後很快消失到public static extern bool SetWindowPos(HandleRef hWnd, HandleRef hWndInsertAfter, int x, int y, int cx, int cy, int flags) - 我假設在這裏發生一些魔術來調整表單的大小。

// Method is called after dialog is created but before Show() is called 
public static void PlaceDialog(Form dialog) 
{ 
dialog.Location = new Point(1, 1);  
} 

任何關於解決方法的想法我可以在PlaceDialog中使用它來解決這個問題嗎?我發現工作至今唯一的一個非常醜陋,打破了多種形式的活動:

// Method is called after dialog is created but before Show() is called 
public static void PlaceDialog(Form dialog) 
{ 
if (dialog.ControlBox == false) 
{ 
    dialog.ControlBox = true; 
    dialog.Show(); 
    dialog.ControlBox = false; 
    dialog.Hide(); 
} 
dialog.Location = new Point(1, 1);  
} 

回答

2

嘗試更改或添加以下內容:

dialog.FormBorderStyle = FormBorderStyle.None; 
+0

我接着說:VAR的borderStyle = dialog.FormBorderStyle; dialog.FormBorderStyle = FormBorderStyle.None; dialog.FormBorderStyle = borderStyle;'在更改位置之前 - 通過您的建議關閉和打開邊框樣式似乎完美地工作。表格被正確定位(我甚至可以在計算中使用表格高度)並且高度是正確的。 – David

相關問題