Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 22.02.2018
Сообщений: 33

Создать класс, в котором механизм перемещения кнопки, для создания его экземпляров

26.04.2018, 11:43. Показов 809. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане! Помогите, пожалуйста, новичку ...
Имеется два метода с механизмом перемещения кнопки:

C#
1
2
3
4
5
6
7
8
9
10
11
12
private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
        }
 
        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left) return;
            button1.Left = button1.Left + (e.X - x);
            button1.Top = button1.Top + (e.Y - y);
        }
Не получается загнать это в класс, чтоб в дальнейшем делать экземпляры ... штук несколько.
Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2018, 11:43
Ответы с готовыми решениями:

Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, перемещения на плоскости
Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и...

Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, перемещения на плоскости
Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и...

Создать класс Структура и наследовать его для создания той или иной динамической структуры
Люди, здравствуйте. Нужно написать программу, которая позволяет хранить некую информацию в некоторой структуре данных. Например,...

6
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.04.2018, 14:41
Объявите отдельный класс, в котором будете задавать начальные значения в обработчике button1_MouseDown()
0
0 / 0 / 0
Регистрация: 22.02.2018
Сообщений: 33
26.04.2018, 14:49  [ТС]
Я делал таким образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    class MoveButton
    {
        int x, y;
 
        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            x = e.X;
            y = e.Y;
        }
 
        private void button1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left) return;
            button1.Left = button1.Left + (e.X - x);
            button1.Top = button1.Top + (e.Y - y);
        }
 
    }
Но появляется ошибка "Имя button1 не существует в текущем контексте". Подскажите, пожалуйста, как это исправить. Спасибо!

P.S. Я уже находил другие варианты реализации данной задачи ... более объемные. А хотелось бы вот таким ...
У меня создалось ощущение, что этот метод не совсем хорош, потому что в нём фигурирует конкретный button1
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.04.2018, 15:05
Nejik, зачем вы обработчики засунули в отдельный класс ?
0
0 / 0 / 0
Регистрация: 22.02.2018
Сообщений: 33
26.04.2018, 15:09  [ТС]
Наверное, из-за слишком недостаточных знаний ))) Пытался сделать, как в этом примере:

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
namespace _222
{
    class MyButton : Button
    {
        //точка перемещения
        Point DownPoint;
        //нажата ли кнопка мыши
        bool IsDragMode;
 
        protected override void OnMouseDown(MouseEventArgs mevent)
        {
            DownPoint = mevent.Location;
            IsDragMode = true;
            base.OnMouseDown(mevent);
        }
 
        protected override void OnMouseUp(MouseEventArgs mevent)
        {
            IsDragMode = false;
            base.OnMouseUp(mevent);
        }
 
        protected override void OnMouseMove(MouseEventArgs mevent)
        {
            //если кнопка мыши нажата
            if (IsDragMode)
            {
                Point p = mevent.Location;
                //вычисляем разницу в координатах между положением курсора и "нулевой" точкой кнопки
                Point dp = new Point(p.X - DownPoint.X, p.Y - DownPoint.Y);
                Location = new Point(Location.X + dp.X, Location.Y + dp.Y);
            }
            base.OnMouseMove(mevent);
        }
    }
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            MyButton btn = new MyButton();
            btn.Name = "btn";
            btn.SetBounds(10, 10, 130, 23);
            btn.Text = "My Button";
            this.Controls.Add(btn);
 
            MyButton btn2 = new MyButton();
            btn2.Name = "btn2";
            btn2.SetBounds(20, 20, 130, 23);
            btn2.Text = "My Button 2";
            this.Controls.Add(btn2);
        }
    }
}
Методы-обработчики, изложенные в моем посте, мне показались проще и более изящные ...
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.04.2018, 15:18
Nejik, т.к. в C# нет возможности создать глобальные переменные, создаются классы. При инициализации формы вы можете создать экземпляр объекта, и в обработчиках уже заполнять/читать значения.
1
0 / 0 / 0
Регистрация: 22.02.2018
Сообщений: 33
26.04.2018, 15:20  [ТС]
Спасибо за помощь! Теперь чуток понятнее, в каком направлении изучать теорию! )) Будем создавать не класс, а объект ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2018, 15:20
Помогаю со студенческими работами здесь

Создать класс «Радиоприемник», в котором поля определяют его различные характеристики
Создать класс «Радиоприемник», в котором поля определяют его различные характеристики, в том числе частоту вещания (УКВ, КВ, СВ и ДВ)....

В списке сделать команды перемещения элемента вверх и вниз по списку (две кнопки для перемещения в ListBox)
Помогите плз с прогой. Задание: в списке сделать команды перемещения элемента вверх и вниз по списку(две кнопки для перемещения в...

Как создать массив экземпляров класса для последующего обращения к его элементам по ссылке?
Всем здравствуйте. Вот код моего класса: class Param { private: int cnt; float akk; int val; public:

Создать назначенное задание реализующее следующий механизм создания резервного копирования данных в каталоге
Подскажите что тут не так и как должно работать? Задание: Создать назначенное задание реализующее следующий механизм создания...

Создать класс, в котором реализовать функции для работы с одномерными массивами
Ребят помогите с задачкой Создать класс, в котором реализовать функции для работы с одномерными массивами: а) получить...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru