Делаем свои окна
Чтобы бы вместо стандартного окна было своё нужно в свойствах формы изменить следующие параметры:
AutoSizeMode – GrowAndShrink (отключаем возможность менять размер окна)
FormBorderStyle – None (отключаем рамку)
BackgrounImage – наша новая форма
Opacity – прозрачность.
Далее нам нужно чтобы форма перемещалась мышью, для этого нужны обработчики событий нажатия и перемещения мыши (Form1_MouseDown, Form1_MouseMove).
private void Form1_MouseDown(object sender, MouseEventArgs e) { mouseOffset = new Point(-e.X, -e.Y); } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) //если по элементу управления двигаем мышь с зажатой левой... { Point mousePosition = Control.MousePosition; //...то получаем координаты mousePosition.Offset(mouseOffset.X, mouseOffset.Y); //смещает точку mouse_pos на указаную точку mouse_offset.X, mouse_offset.Y this.Location = mousePosition; //новые координаты окна } }
Данный код будет обеспечивать перемещение формы при нажатии мышью на неё, но если нажать на какой-то элемент управления и потащить – форма не сдвинется. Для устранения этой проблемы нужно добавить к элементам управления обработчики событий Form1_MouseDown, Form1_MouseMove, а также отдельно вычислять mouseOffset.
private void Form1_Load(object sender, EventArgs e) { foreach (Control control in Controls)//получаем коллекцию элементов управления находящиеся на форме { control.MouseDown += new MouseEventHandler(Form1_MouseDown);//все элементы управления обрабатывают control.MouseMove += new MouseEventHandler(Form1_MouseMove);//нажатие и передвижение мыши } } private void Form1_MouseDown(object sender, MouseEventArgs e) { if (sender == this) //нажали на форму... { mouseOffset = new Point(-e.X, -e.Y); //получаем координаты окна с минусом } else //...или на какойто элемент управления на форме { Control control=(Control)sender; mouseOffset = new Point(-e.X - control.Location.X, -e.Y - control.Location.Y); } } private void Form1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) //если по элементу управления двигаем мышь с зажатой левой... { Point mousePosition = Control.MousePosition; //...то получаем координаты mousePosition.Offset(mouseOffset.X, mouseOffset.Y); //смещает точку mouse_pos на указаную точку mouse_offset.X, mouse_offset.Y this.Location = mousePosition; //новые координаты окна } }
Control – определяет базовый класс для элементов управления, являющихся компонентами с визуальным представлением.
Класс Control реализует основные функциональные возможности, необходимые для классов, отображающих сведения
для пользователя. Он обрабатывает входные данные, полученные с клавиатуры и указывающих устройств.
Point.Offset – метод который смещает точку Point на указанное значение.
Control.Controls – получает коллекцию элементов управления, содержащихся в элементе управления.