C# 用户控件的图形文本

C# 用户控件的图形文本,c#,winforms,user-controls,gdi+,shapes,C#,Winforms,User Controls,Gdi+,Shapes,我创建了一个自定义用户控件来使用形状制作按钮。我设法做到了,但我添加了一个属性,这样它就可以在形状上显示文本,但它没有显示文本。为什么不显示文本 您只在OnPaint实现中绘制奇怪的多边形,不渲染任何文本 添加渲染文本的代码(即使用绘制后多边形: class starbutton : UserControl { [Bindable(true)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)

我创建了一个自定义用户控件来使用形状制作按钮。我设法做到了,但我添加了一个属性,这样它就可以在形状上显示文本,但它没有显示文本。为什么不显示文本


您只在
OnPaint
实现中绘制奇怪的多边形,不渲染任何文本

添加渲染文本的代码(即使用绘制后多边形:

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);
    }
}

创建成形控件的另一个想法是成形其区域

我使用以下规范创建了此控件:

  • 继承自
    按钮
    (我看到您将其命名为
    开始按钮
    ,因此我实现了它继承自
    按钮
    ,如果您只想拥有
    文本
    ,您可以继承自标签)
  • 具有自动渲染的
    文本
    其他内容
  • 具有
    TextAlign
    属性,因此其文本可以像其他控件文本一样以标准对齐方式绘制
  • 绿色多边形以外的区域不再属于控件,单击该区域不受控件控制
  • 绿色多边形以外的区域非常透明,可以看到该区域后面的所有内容
  • 关于区域的设计时行为与运行时相同
代码:

TextRenderer.DrawText(e.Graphics, Text , this.Font, 
    new Point(10, 10), SystemColors.ControlText);
屏幕截图:

TextRenderer.DrawText(e.Graphics, Text , this.Font, 
    new Point(10, 10), SystemColors.ControlText);

你从来没有画过文本。当你重写
OnPaint
时,你负责画所有的东西。我如何在上面画文本?@DeaDViruS除了Alexei的好答案外,我还把我的答案作为一个选项发布。如果你仔细看一下并发现它有帮助,我会很高兴的。谢谢你,这同样有效:),这正是我以前想做的。你能做一个星星形状吗?没那么难,也许需要一些数学知识,我想我能。如果可能的话,还可以做一个圆,因为我试过了,但我得到了一个奇怪的形状。@DeaDViruS没那么难,要画一个圆,你需要使用
drawerlipse
Graphics
方法,对于星形,你需要像以前那样
FillPolygon
,但是星形有点棘手。