Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 08:30   #1
Keiki
 
Регистрация: 22.02.2011
Сообщений: 4
Вопрос Перемещение изображения по форме

Привет! Помогите, пожалуйста!
Есть форма, на неё загружаются n-ое кол-во изображений. После того, как таймер отсчитает нужное кол-во времени пользователь может передвигать изображение по экрану. Проблема в том, что пользователь передвигает сразу все изображения. Также надо проследить, чтобы изображение не выходило за границу формы. Как это лучше всего сделать?
Код:
        private List<PictureBox> pic;
        public bool isDragging = false;
        public ArrayList namepic;       //хранит названия загруженных картинок
        public int n; //кол-во картинок
        Point p;
 
        private void button1_Click(object sender, EventArgs e)
        {
            //загружает и обрабатывает изображение
            for (int i = 0; i < namepic.Count; i++)
            {
                pic.Add(new PictureBox());
                pic[i].Load(namepic[i].ToString() + ".jpg");
                //pic[i].Load(i.ToString() + ".JPG");
                pic[i].SetBounds(a, 10, 100, 100);
                pic[i].SizeMode = PictureBoxSizeMode.Zoom;
 
                pic[i].Cursor = Cursors.Hand;
                Controls.Add(pic[i]);
                a += 120;
 
                pic[i].MouseDown += new MouseEventHandler(pic_MouseDown);
                pic[i].MouseUp += new MouseEventHandler(pic_MouseUp);
                pic[i].MouseMove += new MouseEventHandler(pic_MouseMove);
            }
        }
 
 
        void pic_MouseMove(object sender, MouseEventArgs e)
        {
            for (int i = 0; i < n; i++)
            {
                if (isDragging)
                {
                    pic[i].Top += e.Y - p.Y;
                    pic[i].Left += e.X - p.X;                    
                }
            }
 
            //  throw new NotImplementedException();
        }
 
        void pic_MouseUp(object sender, MouseEventArgs e)
        {
            isDragging = false;
            for (int i = 0; i < n; i++)
                if (dropRect.Contains(pic[i].Bounds))
                    MessageBox.Show("You win!");
 
            // throw new NotImplementedException();
        }
 
        void pic_MouseDown(object sender, MouseEventArgs e)
        {
            isDragging = true;
            p = e.Location;
            //throw new NotImplementedException();
        }
Keiki вне форума Ответить с цитированием
Старый 22.02.2011, 20:27   #2
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Ну тоисть вам надо прошло время передвинул изображение потом опять идет время так???
То сделаейте в pic_MouseUp паузу.
А чтоб не вылазило за приделы pic_MouseDown проверяйте через if(x<300 && y<200)
Cpluser вне форума Ответить с цитированием
Старый 22.02.2011, 20:38   #3
Keiki
 
Регистрация: 22.02.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
А чтоб не вылазило за приделы pic_MouseDown проверяйте через if(x<300 && y<200)
Можно поподробнее? =) Заранее спасибо
Keiki вне форума Ответить с цитированием
Старый 22.02.2011, 22:01   #4
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Сам не могу сделать)
Сделал такую проверку но она не коректно работает может ктот подскажет
Код:
            if (d && (Cursor.Position.X < 200 && Cursor.Position.Y < 200 && Cursor.Position.X > 0 && Cursor.Position.Y > 0))
            {
                pictureBox1.Top += e.Y - y;
                pictureBox1.Left += e.X - x;
            }
Cpluser вне форума Ответить с цитированием
Старый 22.02.2011, 23:57   #5
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Вот сделал возможность таскать 1 pictureBox по окну. Может поможет чем. Работает при условии, что this.FormBorderStyle == System.Windows.Forms.FormBorderStyl e.Sizable; По другому не тестировал.
Код:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.pictureBox1.BackColor = Color.BurlyWood;
        }

        int offsetX = 0;
        int offsetY = 0;
        bool drag;

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            drag = true;
            offsetX = e.Location.X;
            offsetY = e.Location.Y;
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            drag = false;
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (drag)
            {
                int x = Cursor.Position.X - (this.Left + (this.Size.Width - this.ClientSize.Width) / 2) - offsetX;
                int y = Cursor.Position.Y - (this.Top + (this.Size.Height - this.ClientSize.Height - 4)) - offsetY;
                if (x > 0 && x < this.ClientSize.Width - pictureBox1.Width)
                    pictureBox1.Left = x;
                else
                    pictureBox1.Left = x > 0 ? x = this.ClientSize.Width - pictureBox1.Width : 0;
                if (y > 0 && y < this.ClientSize.Height - pictureBox1.Height)
                    pictureBox1.Top = y;
                else
                    pictureBox1.Top = y > 0 ? y = this.ClientSize.Height - pictureBox1.Height : 0;
            }
        }
    }

Последний раз редактировалось Casper-SC; 23.02.2011 в 00:01.
Casper-SC вне форума Ответить с цитированием
Старый 23.02.2011, 09:17   #6
Keiki
 
Регистрация: 22.02.2011
Сообщений: 4
По умолчанию

Спасибо! Всё получилось!=))
Keiki вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение каргинки по форме Dima DDM Общие вопросы Delphi 3 20.01.2011 21:36
Перемещение кнопки по форме! bookkc Помощь студентам 6 14.03.2010 09:39
перемещение в форме bosston Общие вопросы Delphi 2 17.09.2009 10:47
перемещение изображения на фоне Костян Пират Мультимедиа в Delphi 4 09.03.2009 18:21
Перемещение объектов по форме jocry Общие вопросы Delphi 6 06.02.2009 15:41