DOBON.NET DOBON.NETプログラミング掲示板過去ログ

マウスのボタンが押されている間、その軌跡を描く

環境/言語:[C#]
分類:[.NET]

マウスのボタンが押されている間、その軌跡を描く物を作ろうと思い、各所を参考にプログラミングを行いました。ソースは以下の感じです。

Graphics grfx ;  // Graphics オブジェクト
int start = 0 ;  // 1 = 描画中
int startX ;     // Line X 起点
int startY ;     // Line Y 起点

private void Form1_Load(object sender, System.EventArgs e)
{
    // Graphics オブジェクトの取得
    pictureBox1.Image = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width,
                                   Screen.PrimaryScreen.WorkingArea.Height) ;
    grfx = Graphics.FromImage(pictureBox1.Image) ;
}

private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    start = 1 ;
    startX = e.X ;
    startY = e.Y ;
}

private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
    start = 0 ;
}

private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if (start == 0) return ;
    grfx.DrawLine(Pens.Magenta, startX, startY, e.X, e.Y) ;
    startX = e.X ;
    startY = e.Y ;
    pictureBox1.Refresh() ;
}


PictureBoxもありますが、実行してみるとうまい具合に動作しません。なぜでしょうか?
■No15173に返信(covaさんの記事)
> マウスのボタンが押されている間、その軌跡を描く物を作ろうと思い、各所を参考にプログラミングを行いました。ソースは以下の感じです。

> PictureBoxもありますが、実行してみるとうまい具合に動作しません。なぜでしょうか?

『うまい具合に動作しません』とは、どのようになっているのでしょうか?
こちらの環境で実行してみたところ、
マゼンタの色でちゃんと描画されましたよ。

念のためですが、
上記ソースを書いたのみで
イベントを取得するロジックを書いていないってことはないですよね?

#たとえばこんな感じの・・・
this.pictureBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
this.pictureBox1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
■No15174に返信(夏椰さんの記事)
マゼンタの色でちゃんと描画されましたよ。
>
> 念のためですが、
> 上記ソースを書いたのみで
> イベントを取得するロジックを書いていないってことはないですよね?
>
詳しくソースを見てみたら、この部分がありませんでした。追加してみたところ、マウスをドラッグするとエラーが起きて中断してしまいます。
■No15180に返信(covaさんの記事)
> ■No15174に返信(夏椰さんの記事)
> マゼンタの色でちゃんと描画されましたよ。
>>
>>念のためですが、
>>上記ソースを書いたのみで
>>イベントを取得するロジックを書いていないってことはないですよね?
>>
> 詳しくソースを見てみたら、この部分がありませんでした。追加してみたところ、マウスをドラッグするとエラーが起きて中断してしまいます。

どんなエラーが出たかを教えていただけないと何もいえません。
オレのところでは描画できているのを確認しているので。
■No15181に返信(夏椰さんの記事)
エラーのないようですが、実行させてマウスをドラッグすると、

'System.NullReferenceException' のハンドルされていない例外が WindowsApplication9.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。

と出ます。
> 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
> と出ます。

そのエラーの発生箇所は、特定できていますか?

特定できている場合は、その時点で、オブジェクト参照が null に
なっている物があると思いますので、それを探してみてください。
■No15183に返信(covaさんの記事)
> ■No15181に返信(夏椰さんの記事)
> エラーのないようですが、実行させてマウスをドラッグすると、
>
> 'System.NullReferenceException' のハンドルされていない例外が WindowsApplication9.exe で発生しました。
>
> 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
>
> と出ます。

まさかとは思いますが、
FormのLoadイベントもちゃんと足しましたよね?
#念のための確認+内容を下に書きますね。

>#たとえばこんな感じの・・・
>this.pictureBox1.MouseDown += new >System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
>this.pictureBox1.MouseUp += new >System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseUp);
>this.pictureBox1.MouseMove += new >System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);

で、私は『たとえば』といっています。
で、covaさんが拾うべきイベントは メソッド名から推察するに
FormLoadイベントも必要ですよね?
私の『たとえ』ではMouseDown,MouseUp,MouseMoveしか設定していないのです。
できました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板