日期:2014-05-18  浏览次数:21352 次

Winform实现圆角TextBox
在WEB或WPF里很好实现,WINFORM下好像要重绘控件吧。

具体的实现代码,哪位能提供一下呢,谢谢了。

------解决方案--------------------
private void Form1_Load(object sender, EventArgs e)
{
this.textBox1.Region = new Region(GetRoundRectPath(new RectangleF(0, 0, this.textBox1.Width, this.textBox1.Height), 10f));
}

//适合调整参数radius...
public GraphicsPath GetRoundRectPath(RectangleF rect, float radius)
{
return GetRoundRectPath(rect.X, rect.Y, rect.Width, rect.Height, radius);
}

public GraphicsPath GetRoundRectPath(float X, float Y, float width, float height, float radius)
{
GraphicsPath path = new GraphicsPath();
path.AddLine(X + radius, Y, (X + width) - (radius * 2f), Y);
path.AddArc((X + width) - (radius * 2f), Y, radius * 2f, radius * 2f, 270f, 90f);
path.AddLine((float)(X + width), (float)(Y + radius), (float)(X + width), (float)((Y + height) - (radius * 2f)));
path.AddArc((float)((X + width) - (radius * 2f)), (float)((Y + height) - (radius * 2f)), (float)(radius * 2f), (float)(radius * 2f), 0f, 90f);
path.AddLine((float)((X + width) - (radius * 2f)), (float)(Y + height), (float)(X + radius), (float)(Y + height));
path.AddArc(X, (Y + height) - (radius * 2f), radius * 2f, radius * 2f, 90f, 90f);
path.AddLine(X, (Y + height) - (radius * 2f), X, Y + radius);
path.AddArc(X, Y, radius * 2f, radius * 2f, 180f, 90f);
path.CloseFigure();
return path;
}

------解决方案--------------------
探讨

晕,我楼上刚说的很粗糙效果的就是1L朋友发的代码。

而且我希望能写一个TextBoxEX类,继承TextBox类,然后实例化TextBox的时候,直接用我的TextBoxEX类就可以了。