我正在更新他們的WinForms應用程序用戶界面的項目,以更大的一致性。即使使用相同的字體,TextBox和ComboBox控件默認具有不同的高度。我已經能夠通過關閉AutoSize來調整文本框的大小,但文本仍然擁抱控件的頂部,並在下面留下空隙。C#WinForms文本框等垂直對齊
有什麼辦法可以在控件中垂直居中文本嗎?
我正在更新他們的WinForms應用程序用戶界面的項目,以更大的一致性。即使使用相同的字體,TextBox和ComboBox控件默認具有不同的高度。我已經能夠通過關閉AutoSize來調整文本框的大小,但文本仍然擁抱控件的頂部,並在下面留下空隙。C#WinForms文本框等垂直對齊
有什麼辦法可以在控件中垂直居中文本嗎?
如果你在一個控制關閉AutoSize
,它必須是一個Label
,因爲TextBox
不具有AutoSize
財產。 Label
的TextAlign屬性屬於ContentAligment類型,因此您可以設置水平和垂直對齊方式。
由於各種枯燥的原因,Windows中的文本框旨在自動調整其使用字體的高度。爲了控制文字的高度和垂直居中,您可以快速創建一個自定義的UserControl,您可以用它替換所有的文本框。
在您的用戶控件上,將BorderStyle設置爲Fixed3D,將BackColor設置爲System.Window。添加一個TextBox並將其BorderStyle設置爲None。在控件的Resize事件中,添加使TextBox的寬度與用戶控件的客戶區相同的寬度(佔邊界像素)並左對齊(即textBox1.Left = 0;
)並將其垂直居中(例如textBox1.Top = (this.Height - textBox1.Height)/2;
)。
最後,向用戶控件添加您需要的任何TextBox類型屬性和事件(可能只是Text和TextChanged,我會猜測),並將它們連接起來,以便它們傳遞到控件中的TextBox,如下所示:
public string Text
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
如果你想獲得超看中這一點,你甚至可以取代你的用戶控件的一個,實際上是類型的ContentAlignment(如標籤),然後對齊內文本框來匹配TextAlign屬性。
這種方法適用於ComboBox,雖然看起來有點奇怪。使用ComboBox,將FlatStyle屬性設置爲Flat - 否則您將其與TextBox相同處理。它看起來很奇怪,因爲下拉箭頭框不會完全位於面板的頂部和底部。
晚了一點,但這裏簡單的答案..
創建一個空的控制,包括你的文本作爲一個孩子,那麼當父控件或文本框調整重新調整你的文本框控件中間垂直
刪除邊框,使bk與父母相同(默認)
哦,覆蓋字體設置文本框的字體,我認爲你有你的valign文本框。
一個非常簡單的解決方案是使用一列Datagridview,1行,列和行標題不可見,並設置DefaultCellStyle.Alignment = MiddleLeft。
並禁用添加/刪除行,並且您有一個文本框,可以完美地對齊文本。
就像一個參考,實際上TextBoxes上有一個AutoSize屬性。它不會顯示在屬性表中或由於某些屬性裝飾而自動完成。但myTextBox.AutoSize = false;將編譯,並將其放入繼承控件的構造函數將導致可調整大小的文本框。 – Clyde 2010-04-16 13:58:05
已注意。自從我停止嘗試讓Windows控件看起來不同於標準已經有好幾年了,所以我有點生疏了。有趣的是,Intellisense說「這個屬性與這個類沒有關係」,儘管它顯然*是*(將它設置爲false確實使得高度可調)。 – MusiGenesis 2010-04-16 14:29:56
我想更容易的答案是:切換到WPF。一切都有一個VerticalContentAlignment和一個HorizontalContentAlignment屬性。 – MusiGenesis 2010-04-16 14:33:24