我在以简单的窗体形式在组框中绘制一条线时遇到了麻烦。
这是我的代码:
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方法附加到按钮单击事件,它绘制正常,但它不会在窗体的加载时绘制。
请建议。
答案 0 :(得分:24)
快速&脏:
如何创建宽度为1像素的面板并为其指定背景颜色?
答案 1 :(得分:4)
为Paint
的{{1}}事件挂钩事件处理程序,并从该事件处理程序中调用GroupBox
。然后,您应该使用事件参数提供的DrawLShapeLine
对象:
Graphics
现在你的代码看起来会在表单需要绘画时尝试在private void groupBox1_Paint(object sender, PaintEventArgs e)
{
DrawLShapeLine(e.Graphics, 10, 10, 20, 40);
}
中绘画。组合框可以在任何其他场合绘制,这样你画的线就会消失。
答案 2 :(得分:4)
另一种选择是使用Visual Basic Power Packs中提供的行控件。
如果您有Visual Studio 2008 SP1或Visual Studio 2010,则无需下载任何内容。
如果在“工具箱”中没有看到Visual Basic PowerPacks控件,请右键单击“工具箱”,然后在上下文菜单中选择“全部显示”。
答案 3 :(得分:1)
添加没有文字,3D边框和高度2的标签(您必须在属性页面中设置高度,而不是使用GUI)!
答案 4 :(得分:0)
我不确定是否有其他事情发生,但你应该在GroupBox
的Paint事件上绘制一行,而不是Form
。