Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
1

Как ограничить перемещение кнопки в пределах диапазона

01.09.2019, 15:10. Показов 2499. Ответов 2

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Пытаюсь сделать свой track bar но с несколькими ползунками, которые будут перемещаться в изменяемом диапазоне. Перемещать и передавать значение ползунка я научился. Не могу ограничить его положение диапазоном, например от "0" до "95". Это нужно, чтобы ползунок trackbara при перемещении не пересекал другие ползунки.
C#
1
2
3
4
5
6
7
8
9
10
        private void minPolzunok_MouseMove(object sender, MouseEventArgs e)
        {
            if (isPressedMin == true) // на MouseDown получает значение true, а на MouseUp = false
            {
                minPolzunok = (Button)sender;
                minPolzunok.Left += e.X;
                min = minPolzunok.Location.X; // значение для вывода
                minValueText.Text = min.ToString(); // label
            }
        }
Добавлено через 3 часа 28 минут
Попытался сделать так:
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
25
            if (isPressedMin == true)
            {
                minPolzunok = (Button)sender;
                minPolzunok.Left += e.X;
                int pos = minPolzunok.Location.X;
                if (pos >= 0 && pos <= 95)
                {
                    min = minPolzunok.Location.X;
                    minValueText.Text = min.ToString();
                }
                if (pos < 0)
                {
                    minPolzunok.Left = 0;
                    min = 0;
                    minValueText.Text = min.ToString();
                    isPressedMin = false;
                }
                if (pos > 95)
                {
                    minPolzunok.Left = 95;
                    min = 95;
                    minValueText.Text = min.ToString();
                    isPressedMin = false;
                }
            }
но работает криво. При достижении предела диапазона ползунок (кнопка) останавливается и больше не двигается, нужно отпустить клавишу мыши и снова нажать, причем курсор должен быть расположен в сторону диапазона от середины ползунка. Т.е. если достигнут предел минимального значения (0), то правее середины ползунка, если достигнут предел максимального значения (95), то курсор при нажатии должен быть расположен левее середины ползунка. Кто-нибудь знает, как решить хотябы одну из вышеперечисленных нестыковок?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2019, 15:10
Ответы с готовыми решениями:

Ограничить перемещение курсора в пределах формы
Как ограничить перемещение курсора в пределах формы?

Как правильно ограничить php скрипты виртуального хостинга в пределах директории сайта?
На локальном компьютере установлена связка WAMP. Сайты разложены по папкам и настроены виртуальные...

Как ограничить прогрессию в рамках диапазона int?
как ограничить прогрессию в рамках диапазона int?

Как ограничить перемещение компонента на форме?
Здравствуйте. Подскажите пожалуйста, как сделать 2 (n) Image «не проходимыми» при перемещение на...

2
134 / 129 / 59
Регистрация: 16.06.2013
Сообщений: 523
03.09.2019, 04:54 2
Лучший ответ Сообщение было отмечено Keramer82 как решение

Решение

Хм. Чисто навскидку:
1. Отпускать и снова нажимать кнопку приходится из-за того, что вы ставите:
C#
1
isPressedMin = false;
При достижении границы. Т.е. дальше обработчик перемещения мыши просто не срабатывает из-за первого условия.
2. Сдвиг (т.е. "minPolzunok.Left += e.X;") нужно делать после того, как прошла проверка.
Т.е. должно быть что-то типа того:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
            if (isPressedMin == true)
            {
                minPolzunok = (Button)sender;                
                int pos = minPolzunok.Left + e.X;
                if (pos < 0)
                {
                    minPolzunok.Left = 0;
                    min = 0;
                    minValueText.Text = min.ToString();
                }
                else if (pos > 95)
                {
                    minPolzunok.Left = 95;
                    min = 95;
                    minValueText.Text = min.ToString();
                }
                 else
                {
                    minPolzunok.Left = pos;
                    min = minPolzunok.Location.X;
                    minValueText.Text = min.ToString();
                }
            }
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
03.09.2019, 15:26  [ТС] 3
Огромное спасибо! А то я уже нагородил огород из прозрачных панелей передающих каждая свое значение, когда курсор над ними. Теперь все выглядит изящно и работает как нужно. Еще раз спасибо.
0
03.09.2019, 15:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2019, 15:26
Помогаю со студенческими работами здесь

Как ограничить перемещение пользователя по личному кабинету?
Пожалуйста подскажите решение или &quot;где спросить&quot;? Задача: ограничить перемещение пользователя по...

Сортировка вектора в пределах диапазона
Всем привет. Можно ли с помощью sort() произвести сортировку целочисленного вектора в определенном...

Получить сумму в пределах диапазона
Добрый день. Подскажите как сделать чтобы в массиве при вводе 2-ух чисел от складывал весь...

Ограничить перемещение окна
Можно ли ограничить перемещение окна, чтобы оно не двигалось дальше указанного диапазона


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru