Какой рейтинг вас больше интересует?
|
Привязка окон друг к другу при перетаскивании2012-10-26 15:36:17 (читать в оригинале)
Для реализации нам понадобятся две формы, главная и дочерняя. Для создания дочернего(вторая форма) перейдите в обозреватель решений и правой клавишей мыши щелкните но названию проекта, далее выберите Добавить-> Создать элемент и выберете "Фома Windows Form". В коде главной формы прописываем код: public bool down = false, //проверяет, пристыковано ли окно к нижней границе left = false, //проверяет, пристыковано ли окно к левой границе top = false, //проверяет, пристыковано ли окно к верхней границе right = false; //проверяет, пристыковано ли окно к правой границе public double leftlength, toplength; //переменные нужны для вычисления смещения второго окна по отношению к главному //Создаем объект второго окна Form2 fr2 = new Form2();В свойствах главной формы создаем событие LocationChanged и вставляем туда вот этот код: //Стыковка с нижней границей главного окна if (down) { //Второе окно оставляем у нижней границы главного окна путем смещения координаты верхней границы на значение высоты главного окна fr2.Top = this.Top + this.Height; //А левую границу второго окна смещаем относительно левой границы главного на величину leftlength, установленную в момент стыковки fr2.Left = (int)this.Left + (int)leftlength; } //Соответственно поступаем и при стыковке с другими границами //Стыковка с верхней границей главного окна if (top) { fr2.Top = this.Top - fr2.Height; fr2.Left = (int)this.Left + (int)leftlength; } //Стыковка с левой границей главного окна if (left) { fr2.Left = this.Left - fr2.Width; fr2.Top = (int)this.Top + (int)toplength; } //Стыковка с правой границей главного окна if (right) { fr2.Left = this.Left + this.Width; fr2.Top = (int)this.Top + (int)toplength; }Переходим в код второй формы и также создаем событие LocationChanged и вставляем туда вот это: Form1 fr1 = this.Owner as Form1; //Стыковка с нижней границей главного окна //Проверяем условия попадания верхней границы данного окна в пределы нижней границы главного окна if ((this.Top < fr1.Top + fr1.Height + 20) && (this.Top > fr1.Top + fr1.Height - 20)) { //Собственно стыковка this.Top = fr1.Top + fr1.Height; //Запоминаем смещение левой границы данного окна и левой границы главного окна (условие ввел для фиксации переменной, чтобы больше не изменять ее во время сеанса текущей стыковки) if (!fr1.down) fr1.leftlength = this.Left - fr1.Left; //Говорим главному окну, что произошла стыковка fr1.down = true; } else fr1.down = false; //Соответственно поступаем с остальными границами //Стыковка с верхней границей главного окна if ((this.Top + this.Height < fr1.Top + 20) && (this.Top + this.Height > fr1.Top - 20)) { this.Top = fr1.Top - this.Height; if (!fr1.top) fr1.leftlength = this.Left - fr1.Left; fr1.top = true; } else fr1.top = false; //Стыковка с левой границей главного окна if ((this.Left + this.Width < fr1.Left + 20) && (this.Left + this.Width > fr1.Left - 20)) { this.Left = fr1.Left - this.Width; if (!fr1.left) fr1.toplength = this.Top - fr1.Top; fr1.left = true; } else fr1.left = false; //Стыковка с правой границей главного окна if ((this.Left < fr1.Left + fr1.Width + 20) && (this.Left > fr1.Left + fr1.Width - 20)) { this.Left = fr1.Left + fr1.Width; if (!fr1.right) fr1.toplength = this.Top - fr1.Top; fr1.right = true; } else fr1.right = false;Этот код реализует стыковку форм и позволяет перетаскивать главной формой состыкованные, и свободно перемещать формы по раздельности если они разъединены!
|
Категория «Новости»
Взлеты Топ 5
Падения Топ 5
Популярные за сутки
|
Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.
взяты из открытых общедоступных источников и являются собственностью их авторов.