Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка на какого типа контрол нажали мышью

49K
07 января 2010 года
-=C@$Per=-
9 / / 09.11.2009
У меня есть код перетаскивания формы за любое место, то есть не стандартным способом, но этот код до того как я добавил в него проверку "за что схватили мышью" работал так, что можно было таскать за кнопки и т.д. что смотрелось не совсем логично для адекватно написаной программы.

Код:
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
Или в другом месте этого кода проще, что либо поменять?
257
07 января 2010 года
kosfiz
1.6K / / 18.09.2005
Проверяйте с помощью is, например:
 
Код:
if (Sender is Label)
297
07 января 2010 года
koodeer
1.2K / / 02.05.2009
Цитата: -=C@$Per=-

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


Вы просто не умеете их готовить. (с)

Обратите внимание на статические методы Point.Add и Point.Subtract.

 
Код:
Delta = Point.Subtract(CurrentLocation, (Size)OldLocation);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог