2

描いた長方形を実際に選択して、それを移動できるようにするにはどうすればよいのでしょうか。それも削除する必要がありますが、その部分を解決できます。私が何をする必要があるかについて少し迷っています。疑似コードでも実際のコードでもかまいません。足がかりとしていただければ幸いです。

また、長方形 X と Y を listBox に実際に表示する方法を他の誰かが知っていれば、それも素晴らしいでしょう。しかし、現時点で一番の問題は優先順位です。

これが私の長方形を描く方法です:

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {

        if (buttonDown)
        {
            if (pictureBox1.Image != null)
            {
                draw = true;
                Graphics g = Graphics.FromImage(imageFile);
                Pen pen1 = new Pen(color, 4);
                g.DrawRectangle(pen1, e.X - 5, e.Y - 5, 5, 5);
                g.Save();
                pictureBox1.Image = imageFile;
            }                
        }           
    }
4

1 に答える 1

2

このような動作を実現するには、長方形に関する情報を保存する必要があります。たとえば、次のようなクラスで:

class Rect
{
    int X { get; set; }
    int Y { get; set; }
    int Width { get; set; }
    int Height { get; set; }
}

すでにRectangleタイプがあることに注意してください。これも使用できますが、構造体であるため、選択を別の方法で処理する必要があります。

これで、長方形と選択範囲のリストを作成できます。

List<Rect> rects = new List<Rect>();
Rect selectedRect = null;

これらの四角形をリストボックスに表示するのはとても簡単です。リストボックスの項目をリストにバインドするだけです。ToString()ユーザーフレンドリーな出力を得るために、オーバーライドが必要になる場合があります。

長方形を描くと、次のようになります。

foreach(var r in rects)
{
    g.DrawRectangle(pen1, r.X, r.Y, r.Width, r.Height);
    ...
}

選択した四角形を強調表示できます。たとえば、別のペンまたはその周りの別の四角形:

if(selectedRect == r)
    g.DrawRectangle(pen1, r.x - 5, r.Y - 5, r.Width + 10, r.Height + 10);

イベントまたは別の適切なイベントで、MouseDownクリックした四角形に選択を設定できます。

foreach(var r in rects)
    if(e.X >= r.X && e.X <= r.X + r.Width && e.Y >= r.Y && e.Y <= r.Y + r.Height)
        selectedRect = r;

四角形を移動するには、クリックされた四角形のポイント (左上隅からの距離) を保存します。マウス移動イベントで、左ボタンが押されているかどうかを確認し、selectedRectそれに応じて位置を変更します。

于 2012-10-03T09:15:37.670 に答える