Как найти четыре координаты и стереть рисунок резинового прямоугольника в C # - PullRequest
0 голосов
/ 05 июля 2010

Привет! Я попытался нарисовать прямоугольник с резинкой на форме, используя мышь в C #.

Проблемы

1) После отпускания мыши прямоугольник исчезает.[Я хочу, чтобы он оставался в форме]

2) Мне также нужно найти координаты четырех точек нарисованного прямоугольника

3) Мне также нужно стереть прямоугольник, чтобы нарисоватьновый при необходимости

Форма:

альтернативный текст http://i46.tinypic.com/9stlcm.jpg


КОД

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Text;
 using System.Windows.Forms;

namespace rubberbandrectangle
{
public partial class Form1 : Form
{
    Boolean bHaveMouse;
    Point ptOriginal = new Point();
    Point ptLast = new Point();


    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        bHaveMouse = true;
        ptOriginal.X = e.X;
        ptOriginal.Y = e.Y;
        ptLast.X = -1;
        ptLast.Y = -1;
    }

    private void MyDrawReversibleRectangle(Point p1, Point p2)
    {
        Rectangle rc = new Rectangle();

        p1 = PointToScreen(p1);
        p2 = PointToScreen(p2);
        if (p1.X < p2.X)
        {
            rc.X = p1.X;
            rc.Width = p2.X - p1.X;
        }
        else
        {
            rc.X = p2.X;
            rc.Width = p1.X - p2.X;
        }
        if (p1.Y < p2.Y)
        {
            rc.Y = p1.Y;
            rc.Height = p2.Y - p1.Y;
        }
        else
        {
            rc.Y = p2.Y;
            rc.Height = p1.Y - p2.Y;
        }
        ControlPaint.DrawReversibleFrame(rc,
                        Color.Red, FrameStyle.Dashed);
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
        bHaveMouse = false;
        if (ptLast.X != -1)
        {
            Point ptCurrent = new Point(e.X, e.Y);
            MyDrawReversibleRectangle(ptOriginal, ptLast);
        }
        ptLast.X = -1;
        ptLast.Y = -1;
        ptOriginal.X = -1;
        ptOriginal.Y = -1;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        Point ptCurrent = new Point(e.X, e.Y);
        if (bHaveMouse)
        {
            if (ptLast.X != -1)
            {
                MyDrawReversibleRectangle(ptOriginal, ptLast);
            }
            ptLast = ptCurrent;
                MyDrawReversibleRectangle(ptOriginal, ptCurrent);
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        MouseDown += new MouseEventHandler(Form1_MouseDown);
        MouseUp += new MouseEventHandler(Form1_MouseUp);
        MouseMove += new MouseEventHandler(Form1_MouseMove);
        bHaveMouse = false;
    }





}
}

Спасибо за чтение

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

Я искал похожую вещь, но был поражен найденным решением!У вас есть координаты правильно?Вы можете просто использовать VisualBasic PowerPacks, он включен в мою версию Visual Studio 2008

Вот пример кода, который будет рисовать прямоугольник над TextBox, т.е. я даю ему настраиваемую границу [code]

Dim x = TextBox1.Location.X
Dim y = TextBox1.Location.Y
Dim width = TextBox1.Width
Dim height = TextBox1.Height
Dim ShapeContainer1 As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
Me.Controls.Add(ShapeContainer1)
Dim RectangleShape1 As New Microsoft.VisualBasic.PowerPacks.RectangleShape
ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {RectangleShape1})
RectangleShape1.Location = New System.Drawing.Point(x - 1, y - 1)
RectangleShape1.Size = New System.Drawing.Size(width + 1, height + 1)
RectangleShape1.BorderColor = Color.MistyRose
ShapeContainer1.Refresh()

Код самоописывается, но если у вас возникнут проблемы, просто оставьте сообщение ... Да, если вы хотите удалить прямоугольник, просто расположите элементы управления (либо Rectangle, либо ShapeContainer в целом), ни живописи, ни хлопот!

1 голос
/ 05 июля 2010

1) После отпускания мыши прямоугольник исчезает.[Я хочу, чтобы он оставался в форме]

Вам необходимо переопределить метод OnPaint формы, чтобы непрерывно рисовать прямоугольник.Прямо сейчас вы рисуете его, когда мышь двигается, но его также нужно рисовать и потом.

2) Мне также нужно найти координаты четырех точек нарисованного прямоугольника

Они должны быть в ваших переменных ptOriginal и ptLast - Что еще вам нужно?

3) Мне также нужно стереть прямоугольник, чтобы нарисовать новый, когда это необходимо

Просто прекратите рисовать прямоугольники нарисуйте новый в OnPaint.

...