Сегодня 2 мая, четверг ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7272
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Справочник по C#
Справочник по C#
Голосов: 1
Адрес блога: http://www.csharpcoderr.com/
Добавлен: 2012-11-28 00:46:26
 

Привязка окон друг к другу при перетаскивании

2012-10-26 15:36:17 (читать в оригинале)


      Не знаю как лучше объяснить, этот код реализует стыковку окон(форм), присоединяет дочерние формы к главному окну. На подобии Winamp.
Для реализации нам понадобятся две формы, главная и дочерняя. 


      Для создания дочернего(вторая форма) перейдите в обозреватель решений и правой клавишей мыши щелкните но названию проекта, далее выберите Добавить-> Создать элемент и выберете "Фома 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;
      Этот код реализует стыковку форм и позволяет перетаскивать главной формой состыкованные, и свободно перемещать формы по раздельности если они разъединены!

Тэги: application, form, window

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»
Изменения рейтинга
Категория «Кино»
Взлеты Топ 5
+363
414
Информационный колодец
+341
345
Yurenzo
+339
343
CAPTAIN
+331
341
Alta1r
+322
361
Vindigo
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.