在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方法附加到按钮单击事件,它绘制正常,但它不会在窗体的负载上绘制。
请指教。
为GroupBox
的Paint
事件连接一个事件处理程序,并从该事件处理程序中调用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中提供的行控件。
如果您有Visual Studio 2008 SP1或Visual Studio 2010,则无需下载任何内容。
如果在“工具箱”中没有看到Visual Basic PowerPacks控件,请右键单击“工具箱”,然后在上下文菜单中选择“全部显示”。
添加没有文本,3D边框和高度为2的标签(您必须在属性页面中设置高度,而不是使用GUI)!
我不确定是否还有其他事情发生,但你应该在GroupBox
的Paint事件上画线,而不是Form
的。