Badmiral
Badmiral

Reputation: 1589

How to draw a line on panel? It is not showing up

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.

Upvotes: 9

Views: 27708

Answers (5)

CLARK
CLARK

Reputation: 88

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();
        
    }

Upvotes: 0

Nick
Nick

Reputation: 3347

If you follow the other answers and still your drawings are not showing up try removing all controls from the control that is being drawn to. The other controls may be covering whatever you are trying to draw.

Upvotes: 0

Combine
Combine

Reputation: 4224

To see your drawing - you can simply make a button with a Click Event and draw when the button is clicked. For example:

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();
}    

Oh, and by the way "drawingArea" is the (Name) of either a PictureBox or Panel you have added to your form (to draw in it).

Upvotes: 0

Mike Webb
Mike Webb

Reputation: 9013

Put it in some event after the form has been created and shown on the screen and it should work fine.

It's best to put it in the Paint event, as keyboardP stated, but it will not show up if called before the form is shown on the screen.

To test this you can add a button and add the code to the click event:

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));
    }
}

Upvotes: 3

keyboardP
keyboardP

Reputation: 69372

Handle the Panel's Paint event and put it in there. What's happening is that it's being drawn once in the constructor but then being drawn over in the Paint event everytime it's called.

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);
    }
}

Upvotes: 14

Related Questions