我正在为一个小项目做一些自定义控制。我创建了一个像这样的TP1CustomFlatButton:
如果我在TP1CustomFlatButton的底部添加带有文字的标签,对我来说很容易。我不想处理该标签的事件,因此我使用事件onPaint来绘制文本。我跟着微软的turtorial,我得到了自定义平面按钮,就像我附上的图片一样。我想要的是使文本对齐中心位于TP1CustomFlatButton的底部。
这是我的TP1CustomFlatButton代码:
// constructor
public TP1CustomFlatButton()
{
this.FlatStyle = FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
this.BackColor = Color.MediumSeaGreen;
this.ForeColor = Color.White;
this.Text = "TP1CustomButton";
}
protected override void OnPaint(PaintEventArgs pevent)
{
pevent.Graphics.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(0, 0, this.Width, this.Height));
TextFormatFlags flags = TextFormatFlags.Bottom;
//render text
TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, new Point((int)(this.Width - Text.Length)/2,this.Height), this.ForeColor, flags);
//draw image
Image img = this.BackgroundImage;
//create rectangle to display image
Rectangle imgRec = new Rectangle(this.Width - 32 /3, this.Height - 32/ 3, 32, 32);
if(img!=null)
pevent.Graphics.DrawImage(img, imgRec);
}
我真的对坐标X和Y感到困惑。正如你所看到的那样,我试图将“SETTINGS”文本字符串对齐TP1CustomFlatButton底部的中心。我花了5个小时来阅读有关Windows窗体中控件的坐标和位置的更多信息。但是现在我真的很累。
希望有人可以为我的自定义控件提供任何建议或解决方案。
答案 0 :(得分:1)
您需要使用MeasureString()
方法来计算中间值。
还可以看到我为了找到中间所做的更改(在drawPoint
字段中计算)。
根据您的代码查看我的示例:
public TP1CustomFlatButton()
{
this.FlatStyle = FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
this.BackColor = Color.MediumSeaGreen;
this.ForeColor = Color.White;
this.Text = "middle";
}
protected override void OnPaint(PaintEventArgs pevent)
{
pevent.Graphics.FillRectangle(new SolidBrush(this.BackColor), new Rectangle(0, 0, this.Width, this.Height));
TextFormatFlags flags = TextFormatFlags.Bottom;
//render text
String drawString = this.Text;
SizeF size = pevent.Graphics.MeasureString(drawString, this.Font);
Point drawPoint = new Point((int)this.Size.Width / 2 - (int)size.Width / 2,this.Height);
TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, drawPoint, this.ForeColor, flags);
//draw image
Image img = this.BackgroundImage;
//create rectangle to display image
Rectangle imgRec = new Rectangle(this.Width - 32 / 3, this.Height - 32 / 3, 32, 32);
if (img != null)
pevent.Graphics.DrawImage(img, imgRec);
}
答案 1 :(得分:0)
尝试按以下方式更改TextFormatFlags:
TextFormatFlags flags = TextFormatFlags.Bottom | TextFormatFlags.VerticalCenter;
另外,请查看此link