如何在C#WinForms中创建一个圆角文本框?

时间:2018-04-06 21:08:33

标签: c# winforms

我已经制作了一个圆形按钮,现在我正在尝试创建一个圆角文本框。我搜索了一些问题,但所有问题都在VB中,我不知道那种语言。转换器很奇怪。所以我尝试创建一个圆形文本框。所以我将UserPaint设置为true,因此我可以使用OnPaint。它在我的按钮上工作得非常漂亮,但它在我的文本框上出现故障。它有两个问题:

  • 无论我将其设置为什么,字体大小始终都是相同的。
  • 当调用onpaint但文本没有更改时删除它。这主要是当我将鼠标悬停在它上面时。

代码:

class RoundedTextBox : TextBox
{
    public Color color = Color.White;
    public int borderRadius = 25;
    public RoundedTextBox()
    {
        SetStyle(ControlStyles.UserPaint, true);
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
        e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
        RectangleF Rect = new RectangleF(0, 0, this.Width, this.Height);
        SolidBrush brush = new SolidBrush(color);
        GraphicsPath GraphPath = Functions.FillRoundedRectangle(e.Graphics, brush, Rect, borderRadius);
        this.Region = new Region(GraphPath);
    }
}

我如何添加文本框:

RoundedTextBox usernameTextbox = new RoundedTextBox();
usernameTextbox.Location = new Point(14, 217);
usernameTextbox.Font = new Font(usernameTextbox.Font.FontFamily, 20);
usernameTextbox.Size = new Size(282, this.Height);
usernameTextbox.color = Color.White;
usernameTextbox.Name = "usernameTextbox";
usernameTextbox.Text = "test";
textboxes.Add(usernameTextbox);
usernameTextbox.BackColor = Color.White;
usernameTextbox.borderRadius = 20;
this.Controls.Add(usernameTextbox);

Gif of the problem

0 个答案:

没有答案