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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2010, 10:43   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию Проверка на элемент какого типа нажали мышью

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

Код:
namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        
        public MainForm()
        {
            InitializeComponent();
            Set_MouseDown_Hook(this);
        }

        void Set_MouseDown_Hook(Control Container)
        {
            foreach (Control C in Container.Controls)
            {
                // В случае, если контрол содержит в себе другие контролы (например Panel), вызываем рекурсивно
                if (C.Controls.Count != 0) Set_MouseDown_Hook(C);
                C.MouseDown += new MouseEventHandler(MainForm_MouseDown);
                C.MouseUp += new MouseEventHandler(MainForm_MouseUp);
                C.MouseMove += new MouseEventHandler(MainForm_MouseMove);
            }
        }

        bool lmbDown = false;
        Point CurrentLocation;
        Point OldLocation;
        Point Delta;

        private void MainForm_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
               //Здесь я добавил проверку
                if(sender as Control == this) 
                {
                    lmbDown = true;
                    CurrentLocation = (sender as Control).PointToScreen(new Point(e.X, e.Y));
                }
            }
        }

        private void MainForm_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left) lmbDown = false;
        }

        private void MainForm_MouseMove(object sender, MouseEventArgs e)
        {
            if (lmbDown)
            {
                OldLocation = CurrentLocation;
                CurrentLocation = (sender as Control).PointToScreen(new Point(e.X, e.Y));

                // Разница. Блин, почему для Point нет перегрузки "-" :)
                Delta.X = CurrentLocation.X - OldLocation.X;
                Delta.Y = CurrentLocation.Y - OldLocation.Y;

                // Перемещение
                this.Top += Delta.Y;
                this.Left += Delta.X;
            }
        }
if(sender as Control == this)
Как сделать, чтобы проверялось не только, что контрол это форма, но и Label? Я понимаю, что можно сделать this.label1 например, но это не подходит, надо именно чтобы прверялось что это контрол типа Label
Или в другом месте этого кода проще, что либо поменять?

Последний раз редактировалось Casper-SC; 07.01.2010 в 20:38.
Casper-SC вне форума Ответить с цитированием
Старый 07.01.2010, 21:03   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Подсказали на другом форуме, оказалось всё проще некуда:
Код:
if((sender as Control == this) | (sender is Label) | (sender is GroupBox))
Casper-SC вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись числа типа инт в ячейку двумерного массива типа char AxenicX Помощь студентам 1 25.09.2009 00:35
Проверка типа вводимых данных ROD Общие вопросы C/C++ 3 19.09.2009 20:22
Первый нечетный элемент каждой строки удвоить (предполагается, что в каждой строке есть нечетный элемент Галина002 Помощь студентам 1 18.03.2009 06:30
С какого возраста вы программируете? veter_s_morya Свободное общение 2 27.05.2008 17:10