Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2009, 02:15   #1
Malish
 
Регистрация: 06.03.2009
Сообщений: 7
По умолчанию C# перемещение кнопки по панели

Здравствуйте.

Суть программы:
1.Пользователь мышкой кликает по панели -> в точке кликанья появляется кнопка, кнопок созданных таким образом может быть несколько.

2.Пользователь хочет переместить созданную им кнопку -> кликает по кнопке(MouseDown) и перемещает ее по панели.

Подскажите, как реализовать перемещение кнопки?
Malish вне форума Ответить с цитированием
Старый 06.03.2009, 08:37   #2
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

Унаследуйте свой класс от Button, переопределите в нем все что нужно и помещайте на панель свой класс
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 06.03.2009, 10:48   #3
Malish
 
Регистрация: 06.03.2009
Сообщений: 7
По умолчанию

Спасибо!!!
У Вас есть ссылка на примерчик или книжку где об это можно почитать?
Malish вне форума Ответить с цитированием
Старый 06.03.2009, 11:02   #4
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

Все проще чем вам кажется=))
Код:
class MyButton: System.Windows.Forms.Button
    {
        protected override void OnMouseDown(MouseEventArgs mevent)
        {
            //Код обработки сюда

            base.OnMouseDown(mevent);
        }
    }
А потом на месте где вы создаете кнопку создаете теперь свою пользовательскую кнопку и все. И при срабатывании события OnMouseDown будет срабатывать ваш обработчик, а только потом вызыватся событие MouseDown.
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 06.03.2009, 11:59   #5
Malish
 
Регистрация: 06.03.2009
Сообщений: 7
По умолчанию

Код:
class MyButton : System.Windows.Forms.Button
    {
        Point DownPoint;
        bool IsDragMode;
        MouseEventArgs e;

        protected override void OnMouseDown(MouseEventArgs mevent)
        {
            DownPoint = e.Location;
            IsDragMode = true;
            base.OnMouseDown(mevent);
        }

        protected override void OnMouseUp(MouseEventArgs mevent)
        {
            DownPoint = e.Location;
            IsDragMode = true;
            base.OnMouseUp(mevent);
        }

        protected override void MouseMove(MouseEventArgs mevent)
        {
            if (IsDragMode)
            {
                Point p = e.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.MouseMove();
        }

    }
выдает ошибочку на событии MouseMove: cannot override because 'System.Windows.Forms.Control.Mouse Move' is not a function
Malish вне форума Ответить с цитированием
Старый 06.03.2009, 12:13   #6
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

Код:
protected override void OnMouseMove(MouseEventArgs mevent)
        {
            if (IsDragMode)
            {
                Point p = e.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);
        }
Будте внимательны, OnMouseMove!! Приставка On означает что это закрытый метод класса. Сначала вызывается этот метод а только после этого уже событие MouseMove
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 06.03.2009, 13:04   #7
Malish
 
Регистрация: 06.03.2009
Сообщений: 7
По умолчанию

Спасибо!!!

Последний раз редактировалось Malish; 06.03.2009 в 19:59.
Malish вне форума Ответить с цитированием
Старый 11.03.2009, 23:29   #8
Malish
 
Регистрация: 06.03.2009
Сообщений: 7
По умолчанию

Подскажите пожалуйста, как реализовать событие по удалению кнопки(например при нажатии на DELETE)?

с панели кнопку удалить можно таким образом:
Код:
panel1.Controls.Remove(button);
Подскажите, пожалуйста, способ который позволит в событиях кнопки получить доступ к другим контролам расположенным на форме?
Malish вне форума Ответить с цитированием
Старый 12.03.2009, 11:35   #9
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

У формы есть поле Controls, содержит список всех элементов управления на форме. Если знаешь имя элемента, то легко можешь найти, пройдясь по этому списку.
Hollander вне форума Ответить с цитированием
Старый 12.03.2009, 19:54   #10
Malish
 
Регистрация: 06.03.2009
Сообщений: 7
По умолчанию

Возможно ли в переопределенное событие кнопки передать форму? или панель?
Malish вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание кнопки в панели задач Trim Общие вопросы Delphi 14 01.08.2010 16:37
Перемещение кнопки? &RiU Общие вопросы Delphi 1 28.05.2008 18:13
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35
Перемещение кнопки клавишами Wolfic Помощь студентам 15 16.10.2007 17:41