2016-09-30 14 views
0

私は最初のビジュアルC#プログラムを作成しています。私はグラフ/線を描画することに挑戦しようとしていますが、現在のコンテキストでは名前のグラフィックスは存在しません。C#Graphics.Drawline関数が機能していません、 "名前 'graphics'が現在のコンテキストに存在しません"

これは私のプログラムの全体です:

public Form1() 
{ 

    InitializeComponent(); 

    Pen blackPen = new Pen(Color.Black, 3); 

    Point point1 = new Point(100, 100); 
    Point point2 = new Point(500, 100); 

    graphics.DrawLine(blackPen, point1, point2); 
} 

Googleはgraphics.DrawLine機能は、私がすでに含まれているSystem.Drawing名前空間内にあることを私に伝えます。

これは私の "こんにちはの世界"のように単純な質問であれば謝罪します。

+0

Graphicsオブジェクトを適切に作成する方法については、MSDNの記事[here](https://msdn.microsoft.com/en-us/library/5y289054(v=vs.110).aspx)を参照してください。 – Jackdaw

+2

アーティーヴルは悪くないが、__いいえ__も。 control.CreateGraphicsのグラフィックスで描画されたanythigが__persist__でないことを明確にすることができません – TaW

答えて

-1

Graphicsをコンストラクタ内のローカル変数として宣言しています。おそらくそれをインスタンスとして最初に宣言し、それをコンストラクタ内に割り当てます。

1

Graphicsオブジェクトがメソッドのパラメータとして提供されているか、表示されているコードの外側で定義されているオンラインで見た例から作業していると思います。 Graphicsオブジェクトは、画面、イメージ、プリンタなどのさまざまなターゲットに描画できます。グラフィックをどこに配置するかを指定する必要があります。どのように適切なGraphicsオブジェクトへの参照を取得するかは、これに依存します。たとえば、簡単な方法で画面に描画する場合は、PaintイベントハンドラをWindowsフォームデザイナを使用してFormに追加します。イベントが発生するとGraphicsというプロパティを持つPaintEventArgsオブジェクトが表示されます。これを使用して図面を作成します。

-1

この問題は、graphics変数を宣言していないことが原因と考えられます。

public Form1() { 
    InitializeComponent(); 

    Pen blackPen = new Pen(Color.Black, 3); 

    Point point1 = new Point(100, 100); 
    Point point2 = new Point(500, 100); 

    Graphics graphics = CreateGraphics(); 
    graphics.DrawLine(blackPen, point1, point2); 
} 

余分な行は、現在のフォームに新しいグラフィックスオブジェクトを作成し、これを使用して線を描くことができます。

+2

これはフォームに描画するのに悪い方法です。理由については、[ここ](http://stackoverflow.com/questions/30419493/d​​rawing-glitches-when-using-creategraphics-rather-than-paint-event-handler-for-c)を参照してください。 – adv12

+0

@ adv12これは、私の最初のアプリタイプの「Hello World」です。ベストプラクティスを説いてはいけません。問題は、宣言されていない変数を使用しようとすることです。 –

+3

問題は、宣言されていない変数を使用しようとしていました。今は、ウィンドウが閉じられたり、サイズが変更されたり、画面外にドラッグされたりしたときに、グラフィックが再描画されない理由についてです。あなたの答えは、バグのコンパイルエラーとなります。 – adv12

4

あなたは、以下のようなコードの何かを持つ、フォームのPaintイベントにイベントハンドラを追加することができます。

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Pen redPen = new Pen(Color.Red, 30); 

     Point point1 = new Point(0, 0); 
     Point point2 = new Point(500, 500); 

     e.Graphics.DrawLine(redPen, point1, point2); 

     redPen.Dispose(); 
    } 

ではなく、フォームのコンストラクタで描画をしようとします。コンストラクタからこのイベントハンドラにコードを移動します。

+0

Penオブジェクトに** Dispose **を呼び出すことを忘れないでください。 – Jackdaw

+0

@Jackdaw Yeap、このDispose呼び出し、良い発言を持つコードを改善することができます!私はコードを更新しました。 – Clock

+0

ありがとうございました...私はあなたの関数をForm1クラスに含めましたが、アプリケーションを実行すると何もしないようです。何か他の行為が必要なのでしょうか? – TechnTom

関連する問題