Bry*_*yan 12 .net fonts paint button winforms
我有一个将在触摸屏系统上使用的应用程序,它包含许多相当大的按钮(~100px square).
每个按钮将有1到4行文本(通常每行一个单词).
由于按钮中有大量的填充,我不得不减小文本的大小,使其变得几乎不可读,但是如果我能够减少内部填充,那么文本将直接绘制到边框那我就不会有问题了.
我试图将控件的填充减少到零,如下所示,但它没有帮助.
this.Text = _label;
this.Font = new Font(this.Font.FontFamily, (float) _size);
this.Padding = new Padding(0);
Run Code Online (Sandbox Code Playgroud)
问题的一个示例如下所示:

正如您所看到的,"OVERVIEW"这个词有足够的空间放在一行上,但是如何在不缩小字体大小的情况下实现这一目标呢?我不喜欢不得不重写控件的文本绘画代码.
编辑:我注意到将填充增加到高达300的各种值,对控件的内部填充没有任何影响.另外,对于信息,我正在使用的按钮是我从Windows.Forms.Button类继承的控件,因为我需要添加一些属性,但是我没有干涉任何Button自己的方法.
小智 7
您不必自己绘制整个按钮.只需将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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以简单地覆盖您继承的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));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7825 次 |
| 最近记录: |