我需要一种让TextBox看起来像平行四边形的方法,但我无法弄清楚如何这样做。我目前有这个代码:
private void IOBox_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Point cursor = PointToClient(Cursor.Position);
Point[] points = { cursor, new Point(cursor.X + 50, cursor.Y), new Point(cursor.X + 30, cursor.Y - 20),
new Point(cursor.X - 20, cursor.Y - 20) };
Pen pen = new Pen(SystemColors.MenuHighlight, 2);
g.DrawLines(pen, points);
}
但显然它没有用。我错放/误用了它,或者我没有做正确的事情。 这是我用来添加它的方法。
int IOCounter = 0;
private void inputOutput_Click(object sender, EventArgs e)
{
IOBox box = new IOBox();
box.Name = "IOBox" + IOCounter;
IOCounter++;
box.Location = PointToClient(Cursor.Position);
this.Controls.Add(box);
}
知道如何解决这个问题吗? IOBox是由我制作的UserControl,它包含一个TextBox。这样做是否合法?
答案 0 :(得分:1)
如果可能,您应该使用WPF创建应用程序。 WPF旨在完成你想要做的事情。
但是,它可以在WinForms中完成,但不容易。您需要创建一个继承TextBox
WinForm控件的新类。下面是一个使TextBox看起来像圆圈的示例:
public class MyTextBox : TextBox
{
public MyTextBox() : base()
{
SetStyle(ControlStyles.UserPaint, true);
Multiline = true;
Width = 130;
Height = 119;
}
public override sealed bool Multiline
{
get { return base.Multiline; }
set { base.Multiline = value; }
}
protected override void OnPaintBackground(PaintEventArgs e)
{
var buttonPath = new System.Drawing.Drawing2D.GraphicsPath();
var newRectangle = ClientRectangle;
newRectangle.Inflate(-10, -10);
e.Graphics.DrawEllipse(System.Drawing.Pens.Black, newRectangle);
newRectangle.Inflate(1, 1);
buttonPath.AddEllipse(newRectangle);
Region = new System.Drawing.Region(buttonPath);
base.OnPaintBackground(e);
}
}
请记住,您仍然需要做其他事情,例如裁剪文本等。但这应该让您开始。