Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 24.05.2020
Сообщений: 80

Форма не выходила за пределы экрана

05.04.2021, 22:32. Показов 2882. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую.
Мне нужно, чтобы форма не выходила за пределы экрана.
На моей форме есть panel при нажатии на который я могу передвигать форму.
Использую след.код:
C#
1
2
3
4
5
6
private void p_bar_MouseDown(object sender, MouseEventArgs e)
        {
            p_bar.Capture = false;
            Message m = Message.Create(Handle, 0xa1, new IntPtr(2), IntPtr.Zero);
            WndProc(ref m);
        }
Когда я подвожу форму к краю экрана мне нужно, чтобы она упиралась в нее и больше не двигалась.
Тут же на форуме нашел решение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void Form1_LocationChanged(object sender, EventArgs e)
        {
            Size size = SystemInformation.PrimaryMonitorSize;
            if (this.Location.X < 0)
            {
                this.Location = new Point(0, this.Location.Y);
            }
            if (this.Location.Y < 0)
            {
                this.Location = new Point(this.Location.X, 0);
            }
            if (this.Location.X + this.Size.Width > size.Width)
            {
                this.Location = new Point(size.Width - this.Size.Width, this.Location.Y);
            }
            if (this.Location.Y + this.Size.Height > size.Height)
            {
                this.Location = new Point(this.Location.X, size.Height - this.Size.Height);
            }
        }
Но когда я принудительно тащу форму за экран, она начинает мерцать. Можно ли как-то избавиться от этого мерцания? Чтобы форма уперлась в границы экрана и все.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2021, 22:32
Ответы с готовыми решениями:

Мышь не выходила за пределы области
Привет всем, у меня есть вопрос, как не выходить за пределы области, к примеру у нас есть картинка .png (пример есть во вложениях), можно...

Чтобы дочерняя форма не выходила за пределы главной
Доброго времени суток. Ребята сделал приложение в с++ builder, и хотел бы чтобы дочерняя форма не выходила за пределы главной :-) Как это...

Какой код писать чтобы мышка не выходила за пределы формы? в vb 2010
Очень надо. Ваш раздел здесь - https://www.cyberforum.ru/vb-net/ Тема перенесена.

2
 Аватар для Synthwave
37 / 24 / 14
Регистрация: 25.01.2021
Сообщений: 99
06.04.2021, 02:34
Лучший ответ Сообщение было отмечено snow1st как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        
private const int DISTANCE = 0;
 
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0046)
            {
                Rectangle workArea = new Rectangle(new Point(0, 0), new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height)); //SystemInformation.WorkingArea;
                Rectangle rect = (Rectangle)Marshal.PtrToStructure((IntPtr)(IntPtr.Size * 2 + m.LParam.ToInt64()), typeof(Rectangle));
 
                if (rect.X <= workArea.Left + DISTANCE)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2, workArea.Left);
 
                if (rect.X + rect.Width >= workArea.Width - DISTANCE)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2, workArea.Right - rect.Width);
 
                if (rect.Y <= workArea.Top + DISTANCE)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2 + 4, workArea.Top);
 
                if (rect.Y + rect.Height >= workArea.Height - DISTANCE)
                    Marshal.WriteInt32(m.LParam, IntPtr.Size * 2 + 4, workArea.Bottom - rect.Height);
            }
            base.WndProc(ref m);
        }
1
0 / 0 / 0
Регистрация: 24.05.2020
Сообщений: 80
06.04.2021, 13:35  [ТС]
Спасибо. Осталось только в это всем разобраться) Хочется понимать, что все значит и как работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2021, 13:35
Помогаю со студенческими работами здесь

Как сделать чтобы картинка выходила за край экрана и не было снизу прокрутки?
У меня проблема не могу сделать чтобы убрался нижний скрол когда картинка выходит за край экрана. Помогите пж. Оператор overflow не...

При разрешении экрана меньше минимального - фон участка, вышедшего за пределы экрана, исчезает
При разрешении экрана меньше минимального - фон участка, вышедшего за пределы экрана, исчезает. Подскажите как бороться с этой проблемой?...

за пределы экрана
В мобильной версии страница немого ездит влево-вправо. Как найти элемент, из-за которого это? Кто какие приёмы использует в работе с...

Выход за пределы экрана
У меня есть объект gluCylinder(quadObj, 0, 15, 40, 10, 10), который я поворачиваю на определенный градус, смещаю, масштабирую...но при...

TabHost за пределы экрана
Здравствуйте. Нужно добавить 7 вкладок в TabHost. Заглавие всех этих вкладок очень сильно сжимается. Как сделать так, чтобы название...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru