|
■No60074 (anny さん) に返信
> Windowsのペイントで四角形を描画するように,マウスの移動中も四角形を描画したいのですが,
提示されたソースにある、pictureBox1 と pictureBox01 の関係がわかりません。
この 2 つはどのような関係にあるのでしょうか?
最初は、PictureBox が 2 つあるのかとも思ったのですが、
pictureBox01 の方は DrawRectangle メソッドを有しているため、
次に想像したのは、pictureBox01 が Graphics クラスという可能性でした。
しかし、それだと pictureBox01.Refresh(); という行が矛盾するので、
結局、どのようなコードなのかを読み取りきれませんでした…。
> 以下現状のソースコードです.よろしくお願い致します.
本当は現状のコードとは異なりますよね? これでは動かないはずですし。
> private static int move_x, move_y; //移動中のマウスの座標
static にしている理由は何ですか?
> protected void pictureBox1_MouseDown(object sender, MouseEventArgs e)
通常は private な pictureBox1_MouseDown を、わざわざ protected に
変更しているのは、どのような意図があるのでしょか?
> my_pen.Color == Color.Black;
my_pen のインスタンスを得ている箇所が無いのは兎も角として…上記は比較動作ですか?
四角形がたくさんできるどころか、そもそもコンパイルエラー(CS0201) になってしまうと思うのですけれども。
(現状のコードには、この記述は無いですよね?)
> start_X = e.X;
> start_Y = e.Y;
> rect_x = start_X;
> rect_y = start_Y;
rect_x/y の変数宣言が漏れているのは兎も角として…start_X/Y は何をするための変数ですか?
start_X/Y が他で使われている様子も無いですし、rect_x/y と同じ値が入っているようなので、
存在意義が読み取れませんでした。
> 全ての軌跡ではなく,表示されている状態の四角形は常に一つになるようにするにはどうしたらいいでしょうか.
元のコードの意図が読み取りきれていないので、やりたい事に合致しているかどうかは分かりませんが:
Point? pos;
Rectangle rect;
protected void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
pos = e.Location;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (pos != null)
{
Point a = pos.Value;
Point b = e.Location;
rect = Rectangle.FromLTRB(
Math.Min(a.X, b.X), Math.Min(a.Y, b.Y),
Math.Max(a.X, b.X), Math.Max(a.Y, b.Y));
((Control)sender).Invalidate();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
((Control)sender).Update();
pos = null;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (pos != null)
{
e.Graphics.DrawRectangle(Pens.Black, rect);
}
}
|