2010-06-21 101 views
0

我最近開始熟悉Visual Studio 2010和C#進行實習。 C#不包含內置的InputBox函數,所以我創建了自己的表單,並帶有文本框,兩個按鈕和一個簡單的標籤。C#標籤屬性在調整大小時不會更新

我有一個功能設置爲允許程序員以常規格式(其中用戶通過文本框輸入輸入)或是/無格式(其中表單隻顯示問題以及是和否按鈕)。

當我切換到是/否格式時,我想以編程方式將標籤居中。我一直在使用的代碼:

labelNote.Left = inputBox.Left + (inputBox.Width/2) - (labelNote.Width/2); 

這應該把註釋的中心放在窗體的中心。但是,如果標籤的內容發生更改(使新標籤更長或更短),則屬性不會更新以反映新尺寸。它不會居中,除非它包含原文。有沒有辦法強制更新?我預見到這將成爲定位未來可擴展性對象的一個​​問題。

謝謝你的時間

+1

您是使用WinForms,WPF還是ASP.NET?據我所知,Winforms, – 2010-06-21 19:09:49

+0

。儘管我對環境和語言相當陌生...... – KChaloux 2010-06-21 19:17:11

回答

0

事實證明,我犯了一個愚蠢的錯誤(我在調試中一個常見的主題,真正的小東西不被注意到時間最長)。

標籤大小調整不是問題。問題在於我更改標籤內容的順序,然後調用函數來計算其新位置。我首先調用了位置計算,因此它根據舊內容找到將標籤居中的位置。我沒有注意這麼久,因爲文本正在改變。我理所當然地認爲這些功能是按照正確的順序調用的。

因此,如果有疑問,請檢查您編寫代碼的順序。無論如何,感謝你的幫助,每個人。我最終發現了一些可以適用於其他場景的簡潔的東西(例如Graphics類中的MeasureString函數)。

0

我假設你有一個actionlistener內的大小。具體來說就是窗體的resize動作監聽器。然後,無論何時調整窗體大小,它都會被調用,並且所有代碼都會被調用。然後從其他地方強制更新,您只需調用actionlistener即可。

的ActionListener:

Private Sub formName_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Resize 

呼叫的ActionListener:

formName_Resize(sender, e) 
+0

我喜歡你的解決方案的外觀,但有幾個問題仍然存在: actionlistener事件是否應該做某些特定的事情?也就是說,它被調用時是否會手動設置標籤的大小? – KChaloux 2010-06-21 19:52:26

+0

是的,它做了一些特定的內容。在那裏你可以手動設置標籤的大小。當我使用它時,我在窗口中設置了每個標籤,字段等的高度,寬度和位置,以便每當用戶更改窗口的形狀時,它們都會動態適應空間。基本上把你的任何代碼改變你的標籤,領域等的大小等。 – Kyra 2010-06-21 20:09:25

0

嗯,你可以一個事件附加到Label.TextChanged。坦率地說,最好是更改TextAlign或類似的東西,儘管:嘗試以聲明方式執行佈局,而不是通過代碼明確執行。這往往會讓事情變得更好。

我發現[TableLayoutPanel] 1控制相當容易處理 - 大部分時間(偶爾會有一個完整的痛苦)。

相關問題