簡體   English   中英

文本框等的 C# WinForms 垂直對齊

[英]C# WinForms Vertical Alignment for TextBox, etc

我正在開發一個項目,更新他們的 WinForms 應用程序 UI 以使其與尺寸更加一致。 TextBox 和 ComboBox 控件默認具有不同的高度,即使使用相同的字體。 我已經能夠通過關閉 AutoSize 來調整文本框的大小,但文本仍然緊貼控件的頂部,在下方留下一個間隙。

有沒有辦法在控件中垂直居中文本?

如果要關閉AutoSize上的AutoSize ,它必須是Label ,因為TextBox沒有AutoSize屬性。 LabelTextAlign屬性屬於ContentAligment類型,因此您可以設置水平和垂直對齊方式。

由於各種無聊的原因,Windows 中的TextBoxes旨在根據所使用的字體自動調整其高度。 要控制文本的高度和垂直居中,您可以快速創建一個自定義UserControl ,您可以使用它來替換所有文本TextBoxes

在您的UserControl ,將BorderStyle設置為Fixed3D ,將BackColorSystem.Window 添加一個TextBox並將其BorderStyle設置為None 在控件的 Resize 事件中,添加代碼,使TextBox與用戶控件的客戶區寬度相同(考慮邊框像素)並將其左對齊(即textBox1.Left = 0; )並垂直居中(例如textBox1.Top = (this.Height - textBox1.Height) / 2; )。

最后,向用戶控件添加您需要的任何TextBox類型的屬性和事件(我猜可能只是 Text 和TextChanged ),並將它們連接起來,以便它們傳遞到您控件中的TextBox ,如下所示:

public string Text
{
    get => textBox1.Text;
    set => textBox1.Text = value;
}

如果您想對此感到非常滿意,您甚至可以將用戶控件的TextAlign屬性替換為實際類型為ContentAlignment (如標簽)的屬性,然后對齊內部TextBox以進行匹配。

同樣的方法適用於ComboBox ,盡管它看起來有點奇怪。 使用ComboBox ,您將其FlatStyle屬性設置為 Flat - 否則您將其作為TextBox 它看起來很奇怪,因為下拉箭頭框不會位於面板的頂部和底部。

創建一個空Control並將您的TextBox作為子項包含在內。 然后當父ControlTextBox ,調整大小,在中間垂直重新對齊TextBox控件。

移除邊框,使背景與父級顏色相同(默認)。 覆蓋字體以設置TextBox字體,我認為您將擁有一個垂直對齊的TextBox

一個非常簡單的解決方案是使用具有 1 列、1 行、列和行標題不可見的Datagridview並執行DefaultCellStyle.Alignment = MiddleLeft

並禁用添加/刪除行,您將擁有一個完美對齊文本的文本框。

您是否嘗試過TableLayoutPanel解決方案來提供垂直對齊? 然后,您可以通過事件動態調整高度,或者使用固定值,或者使用TableLayoutPanel行 AutoSize功能調整高度。

只需添加一個TableLayoutPanel來包含TextBox 這個TableLayoutContainer有 1 列和 3 行。 TextBox必須放在第二行。 第一行和最后一行設置為 50% 的高度(它們實際上只使用“剩余高度”)。 TextBox放在第二行后,可以將此行設置為您選擇的絕對值或自動調整大小。

TableLayoutPanel有自己的寬度和高度控制。 但是,如果您將此TableLayoutPanel放置在另一個TableLayoutPanel的單元格中,請記住將新TableLayoutPanel的屬性 Auto-size 設置為 true,以便它可以根據單元格的大小調整自身。

總的來說, TableLayoutPanels對你的設計有很大幫助,我絕對推薦使用它們。

在此處輸入圖片說明

您可以簡單地調整填充 - 垂直更高。 類別布局中的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM