1

C#またはVB.NETを使用してWinformsアプリケーションを作成しようとしています。これにより、ピクチャボックス内の既存の画像の上にテキストまたは形状を配置し、そのテキストまたは形状をマウスでドラッグできます。たとえば、画像に 90X90 の正方形を配置する場合、「幅」テキスト ボックスに 90 を入力し、「高さ」テキスト ボックスに 90 を入力して画像をクリックすると、既存の画像の上に描画されます。次に、正確に配置したい場所にマウスを移動して配置します。必要に応じて他の手順を実行することもできます (プロセスを開始する [四角形を挿入] ボタンをクリックするなど)。ピクチャボックスを元の画像にリセットし、「マウス移動」イベントが発生したときに形状を描画するルーチンを呼び出すなど、いくつかのアイデアを試しましたが、明らかに遅すぎます。これはピクチャーボックスのペイントイベントで行うべきですか?これは可能ですか、それともアイデアを単純化しすぎていますか?

よろしくお願いします。

4

1 に答える 1

2

以下は、親コントロール内にドラッグ可能な四角形を描画する方法の非常に単純な例です。

public class Draggable : PictureBox
{
    Rectangle shapeBounds;
    bool isDragging;
    Point dragPoint;

    public Draggable()
    {
        InitializeComponent();
        shapeBounds = new Rectangle(10, 10, 30, 30);
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        if (shapeBounds.Contains(e.Location))
        {
            isDragging = true;
            dragPoint = new Point(
                e.Location.X - shapeBounds.Location.X,
                e.Location.Y - shapeBounds.Location.Y);
        }
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
        isDragging = false;
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        if (isDragging)
        {
            Point p = new Point(
                e.Location.X - dragPoint.X,
                e.Location.Y - dragPoint.Y);
            shapeBounds = new Rectangle(p, shapeBounds.Size);
            Invalidate();
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.FillRectangle(Brushes.Red, shapeBounds);
    }
}
于 2012-06-29T12:29:36.530 に答える