在Winforms中绘制一条线

我在一个简单的窗体中在组框中绘制一条线时遇到问题。

这是我的代码:

public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); DrawLShapeLine(groupBox1.CreateGraphics(), 10, 10, 20, 40); } public void DrawLShapeLine(System.Drawing.Graphics g, int intMarginLeft, int intMarginTop, int intWidth, int intHeight) { Pen myPen = new Pen(Color.Black); myPen.Width = 2; // Create array of points that define lines to draw. int marginleft = intMarginLeft; int marginTop = intMarginTop; int width = intWidth; int height = intHeight; int arrowSize = 3; Point[] points = { new Point(marginleft, marginTop), new Point(marginleft, height + marginTop), new Point(marginleft + width, marginTop + height), // Arrow new Point(marginleft + width - arrowSize, marginTop + height - arrowSize), new Point(marginleft + width - arrowSize, marginTop + height + arrowSize), new Point(marginleft + width, marginTop + height) }; g.DrawLines(myPen, points); } } 

如果我将DrawLShapeLine方法附加到按钮单击事件,它绘制正常,但它不会在窗体的负载上绘制。

请指教。

GroupBoxPaint事件连接一个事件处理程序,并从该事件处理程序中调用DrawLShapeLine 。 然后,您应该使用事件参数提供的Graphics对象:

 private void groupBox1_Paint(object sender, PaintEventArgs e) { DrawLShapeLine(e.Graphics, 10, 10, 20, 40); } 

正如您的代码现在看起来,当表单需要绘制时,它将尝试在GroupBox绘制。 combobox可以在任何其他场合绘制,这将使您绘制的线条消失。

快速而肮脏:

如何创建宽度为1像素的面板并给它一个backgroundcolor?

另一种选择是使用Visual Basic Power Pack中提供的行控件。

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/d9e082c8-5386-4481-a744-1c9029805696/

如果您有Visual Studio 2008 SP1或Visual Studio 2010,则无需下载任何内容。

如果在“工具箱”中没有看到Visual Basic PowerPacks控件,请右键单击“工具箱”,然后在上下文菜单中选择“全部显示”。

添加没有文本,3D边框和高度为2的标签(您必须在属性页面中设置高度,而不是使用GUI)!

我不确定是否还有其他事情发生,但你应该在GroupBox的Paint事件上画线,而不是Form的。