8

私はPanel電話をかけていて、このコードを使用しpanel1て線を引こうとしています。panel1

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

しかし、何も現れていません。何か案は?これはWindowsフォームです。

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

描画を表示するには、クリックイベントを使用してボタンを作成し、ボタンがクリックされたときに描画するだけです。例えば:

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 に答える