8

I have a Panel called panel1 and I am trying to draw a line on my panel1 using this code:

var g = panel1.CreateGraphics();
var p = new Pen(Color.Black, 3);

var point1 = new Point(234,118);
var point2 = new Point(293,228);

g.DrawLine(p, point1, point2);

But nothing is showing up. Any ideas? This is in a windows form.

4

5 回答 5

14

处理 Panel 的Paint 事件并将其放入其中。发生的事情是它在构造函数中被绘制一次,但Paint每次被调用时都会在事件中被绘制。

private void panel1_Paint(object sender, PaintEventArgs e)
{
    base.OnPaint(e);
    using(Graphics g = e.Graphics)
    {
       var p = new Pen(Color.Black, 3);
       var point1 = new Point(234,118);
       var point2 = new Point(293,228);
       g.DrawLine(p, point1, point2);
    }
}
于 2012-12-18T23:56:31.727 回答
2

在表单创建并显示在屏幕上之后,将它放在某个事件中,它应该可以正常工作。

正如keyboardP所说,最好将它放在Paint事件中,但如果在屏幕上显示表单之前调用它,它将不会显示。

要对此进行测试,您可以添加一个按钮并将代码添加到单击事件中:

private void button1_Click(object sender, EventArgs e)
{
    using (Graphics g = panel1.CreateGraphics())
    {
        g.DrawLine(new Pen(Color.Back, 3), new Point(234,118), new Point(293,228));
    }
}
于 2012-12-18T23:53:47.047 回答
0

要查看您的绘图 - 您可以简单地制作一个带有 Click Event 的按钮并在单击该按钮时进行绘制。例如:

private void btnDraw_Click(object sender, EventArgs e)
{
    Graphics dc = drawingArea.CreateGraphics();
    Pen BlackPen = new Pen(Color.Black, 2);
    dc.DrawLine(BlackPen, 0, 0, 200, 200);

    BlackPen.Dispose();
    dc.Dispose();
}    

哦,顺便说一句,“drawingArea”是您添加到表单(在其中绘制)的 PictureBox 或 Panel 的(名称)。

于 2015-06-24T08:17:20.060 回答
0

如果您遵循其他答案并且仍然没有显示您的绘图,请尝试从正在绘制的控件中删除所有控件。其他控件可能会覆盖您尝试绘制的任何内容。

于 2018-05-03T18:06:00.343 回答
0
private void button2_Click(object sender, EventArgs e)
    {
        panel1.Paint += new PaintEventHandler(
            (object sender1, PaintEventArgs e1) => {
                var p = new Pen(Color.Black, 3);
                var point1 = new Point(234, 118);
                var point2 = new Point(293, 228);
                e1.Graphics.DrawLine(p, point1, point2);
            }
        );
        
        panel1.Invalidate();
        
    }
于 2020-10-27T11:54:25.967 回答