Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > .NET FAQ > Динамически изменяющееся выделение pictureBox'a


Автор: dammian 28.04.07, 20:04
Проблема в следующем. Есть pictureBox с картинкой, нужно чтобы при движении по нему мышкой рисовался прямоугольник, изменяющийся в зависимости от положения курсора. Но на битмапе не отрожался. Буду признателен за любые идеи.

Автор: TohaSan 28.04.07, 20:04
Я это, правда, уже писал в какой-то теме.. пробуй ;)
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    public partial class Form2 : Form
    {
            public Form2()
            {
                InitializeComponent();
                this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);
                this.pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
                this.pictureBox1.MouseMove += new MouseEventHandler(pictureBox1_MouseMove);
                this.pictureBox1.MouseUp += new MouseEventHandler(pictureBox1_MouseUp);
            }
     
            private int X0, Y0, curX, curY;
            private bool fMouseDown;      
     
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                if (fMouseDown)
                {
                    if (X0 <= curX)
                    {
                        if (Y0 <= curY)
                        {
                            e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(X0, Y0, curX - X0, curY - Y0));
                        }
                        else
                        {
                            e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(X0, curY, curX - X0, Y0 - curY));
                        }
                    }
                    else
                    {
                        if (Y0 <= curY)
                        {
                            e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(curX, Y0, X0 - curX, curY - Y0));
                        }
                        else
                        {
                            e.Graphics.DrawRectangle(new Pen(Color.Black), new Rectangle(curX, curY, X0 - curX, Y0 - curY));
                        }
                    }
                }
            }  
     
            private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
            {
                fMouseDown = true;
                X0 = e.X;
                Y0 = e.Y;
            }
     
            private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
            {
                if (fMouseDown)
                {
                    curX = e.X;
                    curY = e.Y;
                    this.pictureBox1.Refresh();
                }
            }
     
            private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
            {
                fMouseDown = false;
            }
    }

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)