Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/120: Рейтинг темы: голосов - 120, средняя оценка - 4.71
2 / 1 / 2
Регистрация: 01.07.2015
Сообщений: 53

Кнопка убегающая от указателя мыши

08.05.2016, 10:42. Показов 23114. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать следующую программу: при наведении указателя мыши на кнопку ее координаты изменяются произвольным образом в пределах формы (кнопка убегает от указателя мыши) в форме...на си шарп
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2016, 10:42
Ответы с готовыми решениями:

Кнопка, убегающая от указателя мыши
Помогите написать программу!! Надо чтобы елемент button при контакте с курсором мыши "убегал" от курсора (не в произвольном...

Убегающая кнопка
Здравствуйте товарищи программисты. Нужен проект Windows Forms "убегающей кнопки". И чтобы кнопка не выходила за границы формы. ...

Убегающая кнопка
Всем доброго времени суток нужна ваша помощь. Вот задание: Реализовать кнопку, чувственную к движению мыши. При ее наведении она должна...

6
46 / 46 / 18
Регистрация: 20.04.2013
Сообщений: 126
08.05.2016, 13:57
Лучший ответ Сообщение было отмечено dimasiks как решение

Решение

Изменить положение кнопки:
C#
1
button1.Location = new Point(x, y);
где x, y - новые координаты, которые нужно случайным образом генерировать в пределах размера формы.

Данные код нужно прописать в событии button1_MouseMove. (События MouseMove создаются непрерывно при перемещении указателя мыши по объектам.)
И всё готово!
1
2 / 1 / 2
Регистрация: 01.07.2015
Сообщений: 53
08.05.2016, 14:52  [ТС]
Спасибо все получилось !) если можно , что нибудь ещё сказать по этому коду то я буду рад
C#
1
2
3
4
5
6
7
8
9
10
private void button4_MouseMove(object sender, MouseEventArgs e)
        {
            
            Random x = new Random();
            Random y = new Random();
            int xx = Convert.ToInt32(x.Next(124,300));
            int yy = Convert.ToInt32(y.Next(35,250));
            button4.Location = new Point(xx, yy);
            
        }
0
46 / 46 / 18
Регистрация: 20.04.2013
Сообщений: 126
08.05.2016, 20:48
Лучший ответ Сообщение было отмечено dimasiks как решение

Решение

C#
1
Convert.ToInt32
это лишнее. можно и нужно без него. Нет необходимости иметь 2 разных Random и инициализировать их каждый раз внутри события button4_MouseMove - лучше 1 раз его объявить и потом много раз использовать. В общем я бы сделал внутри события button4_MouseMove всего 1 строчку( и вместо жёстко заданных пределов генерации случайных чисел я бы использовал ТЕКУЩЕЕ значение ширины и высоты окна минус размеры кнопки - чтоб пользователь мог менять размер окна и кнопка "прыгала по всему окну"):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Form1 : Form
    {
        Random rnd = new Random();
        
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button4_MouseMove(object sender, MouseEventArgs e)
        {
            button4.Location = new Point(rnd.Next(this.Width - button4.Width), rnd.Next(this.Height - button4.Height));
        }
1
0 / 0 / 0
Регистрация: 30.07.2020
Сообщений: 1
15.08.2021, 08:19
У Вас хорошее решение, но лучше использовать не просто ширину и высоту окна, а ширину и высоту клиентской части окна (this.ClientSize.Width, this.ClientSize.Height). Иначе иногда кнопка будет удирать за пределы той части формы, на которой располагаются элементы.
0
1 / 1 / 0
Регистрация: 21.01.2023
Сообщений: 42
06.12.2023, 07:28
/*
Задание 5
Разработать приложение «убегающий статик» Суть приложения: на форме расположен статический элемент управления
(«статик»). Пользователь пытается подвести курсор мыши к «статику», и, если курсор находиться близко со статиком,
элемент управления «убегает».
Предусмотреть перемещение «статика» только в пределах формы.
*/
Программа сделана не для кнопки а для Panel. Но суть та же. Заранее на Форме ничего создавать не надо, всё прописано через код:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public partial class Form1 : Form
{          
    private Panel staticPanel;
    private Random random = new Random();
    public Form1()
    {
        InitializeComponent();
        this.Load += Form1_Load;
        this.MouseMove += Form1_MouseMove; // Привязка метода Form1_MouseMove к событию MouseMove формы
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        CreateStatic();
    }
 
    // метод для создания статика с использованием экземпляра класса Panel
    private void CreateStatic()
    {
        int x = 300; // начальная координата статика х
        int y = 200; // координата y                  
        staticPanel = new Panel();
        staticPanel.BackColor = Color.Red; // задаем красный цвет фона статика
        Point location = new Point(x, y);
        staticPanel.Location = location;
 
        int width = 40; // ширина статика
        int height = 20; // высота статика
        staticPanel.Width = width;
        staticPanel.Height = height;
        this.Controls.Add(staticPanel); //добавляем статик на Form1
    }
 
     // метод обработки движения мыши       
    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        int distance = 15; // минимальное расстояние
        int mouseX = e.X; // координата X указателя мыши
        int mouseY = e.Y; // координата Y указателя мыши                         
 
        // получаем координаты статика
        int staticX = staticPanel.Left;
        int staticY = staticPanel.Top;
        // вывод координат в заголовок формы (для интереса)     
        this.Text = $"Мышь: X: {mouseX}, Y: {mouseY}, Статик: X: {staticX}, Y :{staticY}";       
        
        //используем Math.Abs для получения абсолютного значения разницы distance
        if (Math.Abs(staticX - mouseX) <= distance)
        {
            staticPanel.Left = random.Next(0, this.ClientSize.Width - staticPanel.Width);
        }
        if (Math.Abs(staticY - mouseY) <= distance)
        {
            staticPanel.Top = random.Next(0, this.ClientSize.Height - staticPanel.Height);
        }
    }
}
Удачи!
0
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 41
06.12.2023, 10:06
Поднять курсор мыши над экраном и ткнуть на статик сверху
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2023, 10:06
Помогаю со студенческими работами здесь

Убегающая кнопка
Добрый вечер. Нужна ваша помощь нужно сделать кнопку которая убегала б от курсора. В интернете есть куча инфы как сделать чтоб она рандомно...

Убегающая кнопка
Вечер добрый, нужна помощь в задачке. Реализовать кнопку, чувственную к движению мыши. При ее наведении она должна двигаться в сторону...

Убегающая кнопка без застревания в углах
В диалоговом окне есть вопрос &quot;ты дурак?&quot; и 2 кнопки(да.нет)нужно,чтобы кнопка нет убегала при направлении мыши. проблема в том, что...

Убегающая кнопка от курсора - нужен пример
Всем привет...помогите пожалуйста... вот пытаюсь сделать так чтобы при наведении курсора кнопка убегала,но ни как не получается...сам...

Когда кнопка мыши зажата, событие попадание курсора мыши в фокус контрола не работает
Есть несколько контролов на форме, на все есть событие возникающее когда мышь попадает на этот контрол, но когда зажать клавишу мыши,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru