C# 图形、绘画、图片框居中
本文关键字:图形 绘画 | 更新日期: 2023-09-27 18:33:11
好的,所以这就是问题所在:在 C# 表单中,我创建了一个新的私有 void:
private void NewBtn(string Name, int x, int y)
其目的是创建一个模仿按钮行为的图片框(不要问为什么,我只是喜欢使事情复杂化),并且可以根据需要调用任意多次。
Font btnFont = new Font("Tahoma", 16);
PictureBox S = new PictureBox();
S.Location = new System.Drawing.Point(x, y);
S.Paint += new PaintEventHandler((sender, e) =>
{
e.Graphics.TextRenderingHint =
System.Drawing.Text.TextRenderingHint.AntiAlias;
e.Graphics.DrawString(Name, btnFont, Brushes.Black, 0, 0);
});
Controls.Add(S);
现在,我担心油漆/图形的一部分(忽略其余代码,我只给出了其中的一部分)。我想将我写为"Name"的文本居中,当我称之为"NewBtn(Name, x, y)"时。那么,我应该把什么放作为
e.Graphics.DrawString(Name, btnFont, Brushes.Black, ThisX???, 0);
建议?
var size = g.MeasureString(Name, btnFont);
e.Graphics.DrawString(Name, btnFont, Brushes.Black,
(S.Width - size.Width) / 2,
(S.Height - size.Height) / 2));
您可以通过仅测量一次字符串来改善这一点,考虑到特定按钮/图片框的字体和文本不会更改。
我还建议检查S.Size
是否比size
宽/高并处理它,这样图形就不会尝试绘制从负坐标开始的字符串。
尝试使用 String.Drawing.StringFormat Option 的 Graphics.DrawString 方法
StringFormat drawFormat = new StringFormat();
drawFormat.Alignment= StringAlignment.Center;
drawFormat.LineAlignment = StringAlignment.Center;
您在这里有两个选项,第一个是使用坐标。
e.Graphics.DrawString(("Name", new Font("Arial", 16), Brushes.Black, 10, 10, drawFormat);
第二种是创建一个像这样的矩形:
e.Graphics.DrawString("Name", new Font("Arial", 16), Brushes.Black, new Rectangle(0,0,this.Width,this.Height), drawFormat);