Dot-Net
減少 WinForms 按鈕中文本周圍的填充
我有一個將在觸摸屏系統上使用的應用程序,它包含許多相當大的按鈕(約 100 像素正方形)。
每個按鈕將有 1 到 4 行文本(通常每行一個單詞)。
由於按鈕中的大量填充,我不得不減小文本的大小,使其變得幾乎不可讀,但是如果我能夠減少內部填充,以便文本可以直接繪製到邊框,那我就沒有問題了。
我試圖將控制項的填充減少到零,如下所示,但這無濟於事。
this.Text = _label; this.Font = new Font(this.Font.FontFamily, (float) _size); this.Padding = new Padding(0);問題範例如下所示:
如您所見,“OVERVIEW”一詞有足夠的空間可以放在一行上,但是如何在不減小字型大小的情況下實現這一點?我不喜歡必須重寫控制項的文本繪製程式碼的想法。
編輯:我注意到將填充增加到高達 300 的各種值對控制項的內部填充沒有影響。另外作為參考,我正在使用的按鈕是我從 Windows.Forms.Button 類繼承的控制項,因為我需要添加一些屬性,但是我沒有乾擾任何 Button 自己的方法。
您還可以簡單地重寫繼承自的 Button 控制項的 OnPaint() 方法,並省略呼叫 base.OnPaint(),並將其替換為您自己的繪製程式碼。
protected override void OnPaint(PaintEventArgs pevent) { //omit base.OnPaint completely... //base.OnPaint(pevent); using (Pen p = new Pen(BackColor)) { pevent.Graphics.FillRectangle(p.Brush, ClientRectangle); } //add code here to draw borders... using (Pen p = new Pen(ForeColor)) { pevent.Graphics.DrawString("Hello World!", Font, p.Brush, new PointF(0, 0)); } }
您不必自己繪製整個按鈕。只需將 Text 屬性留空並將您的文本分配給 OwnerDrawText
public class NoPaddingButton : Button { private string ownerDrawText; public string OwnerDrawText { get { return ownerDrawText; } set { ownerDrawText = value; Invalidate(); } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (string.IsNullOrEmpty(Text) && !string.IsNullOrEmpty(ownerDrawText)) { StringFormat stringFormat = new StringFormat(); stringFormat.Alignment = StringAlignment.Center; stringFormat.LineAlignment = StringAlignment.Center; e.Graphics.DrawString(ownerDrawText, Font, new SolidBrush(ForeColor), ClientRectangle, stringFormat); } } }
