形状用户控件的绘图文本
Drawing Text of shaped user control
class starbutton : UserControl
{
[Bindable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text { get { return base.Text; } set { base.Text = value; this.Invalidate(); } }
protected override void OnPaint(PaintEventArgs e)
{
Graphics graphics = e.Graphics;
SolidBrush brush2 = new SolidBrush(Color.Green);
Point[] points =
{
new Point(ClientSize.Width / 2, 0),
new Point(0, ClientSize.Height/4),
new Point(0, ClientSize.Height),
new Point(ClientSize.Width, ClientSize.Height)
};
graphics.FillPolygon(brush2, points);
base.OnPaint(e);
}
}
我创建了一个自定义用户控件来制作一个使用形状的按钮。我设法做到了,但我添加了一个 属性 以便它可以在形状上显示文本,但它没有显示文本。为什么不显示文字?
您在 OnPaint
实现中只绘制了奇怪的多边形,没有渲染任何文本。
添加渲染文本的代码(即在绘制多边形后使用 TextRenderer.DrawText:
TextRenderer.DrawText(e.Graphics, Text , this.Font,
new Point(10, 10), SystemColors.ControlText);
创建形状控件的另一个想法是塑造它的区域。
我按照以下规范创建了这个控件:
- Inherited from
Button
(我看到你命名为StartButton
,所以我实现它继承自Button
,如果你只想拥有[=14=,你可以继承label ])
- 有
Text
自动呈现其他内容
- 具有
TextAlign
属性 因此其文本可以像其他控件文本一样按照标准对齐方式绘制。
- 绿色多边形之外的区域不再属于控件,点击该区域不受控件处理。
- 绿色多边形之外的区域非常透明,后面的一切都会被看到。
- 有关区域的设计时间行为与 运行 时间相同。
代码:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace MyUserControls
{
public class StartButton : Button
{
public StartButton()
{
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
this.BackColor = System.Drawing.Color.Green;
this.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
this.Size = new Size(100, 100);
}
protected override void OnPaint(PaintEventArgs pevent)
{
this.UpdateRegion();
base.OnPaint(pevent);
}
protected void UpdateRegion()
{
var path = new GraphicsPath();
Point[] points =
{
new Point(ClientSize.Width / 2, 0),
new Point(0, ClientSize.Height/4),
new Point(0, ClientSize.Height),
new Point(ClientSize.Width, ClientSize.Height)
};
path.AddPolygon(points);
this.Region = new Region(path);
}
}
}
截图:
class starbutton : UserControl
{
[Bindable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text { get { return base.Text; } set { base.Text = value; this.Invalidate(); } }
protected override void OnPaint(PaintEventArgs e)
{
Graphics graphics = e.Graphics;
SolidBrush brush2 = new SolidBrush(Color.Green);
Point[] points =
{
new Point(ClientSize.Width / 2, 0),
new Point(0, ClientSize.Height/4),
new Point(0, ClientSize.Height),
new Point(ClientSize.Width, ClientSize.Height)
};
graphics.FillPolygon(brush2, points);
base.OnPaint(e);
}
}
我创建了一个自定义用户控件来制作一个使用形状的按钮。我设法做到了,但我添加了一个 属性 以便它可以在形状上显示文本,但它没有显示文本。为什么不显示文字?
您在 OnPaint
实现中只绘制了奇怪的多边形,没有渲染任何文本。
添加渲染文本的代码(即在绘制多边形后使用 TextRenderer.DrawText:
TextRenderer.DrawText(e.Graphics, Text , this.Font,
new Point(10, 10), SystemColors.ControlText);
创建形状控件的另一个想法是塑造它的区域。
我按照以下规范创建了这个控件:
- Inherited from
Button
(我看到你命名为StartButton
,所以我实现它继承自Button
,如果你只想拥有[=14=,你可以继承label ]) - 有
Text
自动呈现其他内容 - 具有
TextAlign
属性 因此其文本可以像其他控件文本一样按照标准对齐方式绘制。 - 绿色多边形之外的区域不再属于控件,点击该区域不受控件处理。
- 绿色多边形之外的区域非常透明,后面的一切都会被看到。
- 有关区域的设计时间行为与 运行 时间相同。
代码:
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace MyUserControls
{
public class StartButton : Button
{
public StartButton()
{
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
this.BackColor = System.Drawing.Color.Green;
this.TextAlign = System.Drawing.ContentAlignment.BottomLeft;
this.Size = new Size(100, 100);
}
protected override void OnPaint(PaintEventArgs pevent)
{
this.UpdateRegion();
base.OnPaint(pevent);
}
protected void UpdateRegion()
{
var path = new GraphicsPath();
Point[] points =
{
new Point(ClientSize.Width / 2, 0),
new Point(0, ClientSize.Height/4),
new Point(0, ClientSize.Height),
new Point(ClientSize.Width, ClientSize.Height)
};
path.AddPolygon(points);
this.Region = new Region(path);
}
}
}
截图: