Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/41: Рейтинг темы: голосов - 41, средняя оценка - 4.68
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713

Обрабатывать mouseMove для формы, даже если курсор находится над контроллом

09.11.2012, 20:05. Показов 7921. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
накинул на форму событие MouseMove, но оно не отрабатывает, т.к вся форма забита контралами, и по факту я не вожу курсор по форме.

мне нужно анализировать каждое положение мышки на форме. help plz)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2012, 20:05
Ответы с готовыми решениями:

Определить что над контроллом находится курсор мыши
Есть ли у System.Windows.Forms.Control или у наследников свойство определяющее, что курсор мыши над контролом(не фокус).

Как перемещая курсор мышки над ячейками, определять над какой он находится?
как перемещая курсор над ячейками, определять над какой он находится? (Перемещение курсора мышки, а не ячеек) Допустим я навожу...

Обработчик события OnMouseMove для компонента Memo, с выводом сообщения "Курсор находится над объектом"
Конечно это перебор, но не могли вы помочь с этими мелкими программками))) 1. В компоненте MaskEdit реализовать шаблон ввода...

7
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
09.11.2012, 20:32
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
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public struct POINT
    {
        public int X;
        public int Y;
    }
 
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool GetCursorPos(out POINT lpPoint);
 
        public IEnumerable<Control> AllControls(Control control)
        {
            foreach (Control _contrl in control.Controls)
            {
                yield return _contrl;
                if (_contrl.Controls.Count > 0)
                    foreach (Control childControl in AllControls(_contrl))
                        yield return childControl;
            }
        }
 
        public Form1()
        {
            InitializeComponent();
            IEnumerable<Control> allControls = AllControls(this);
            foreach (Control control in allControls)
                control.MouseMove += Form1_MouseMove;
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (sender is Form)
                this.Text = string.Format("X: {0} Y: {1}", e.X, e.Y);
            else
            {
                POINT point = new POINT();
                if (GetCursorPos(out point))
                {
                    Point p = this.PointToClient(new Point(point.X, point.Y));
                    this.Text = string.Format("X: {0} Y: {1}", p.X, p.Y);
                }
            }
        }
    }
}
1
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
09.11.2012, 20:45  [ТС]
а может еще подскажите, как узнать точку на форме где начинается отрисовка контрола?
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
09.11.2012, 22:23
C#
1
control.Location
0
35 / 35 / 1
Регистрация: 14.11.2012
Сообщений: 176
06.01.2013, 15:43
Здравствуйте!
Аналогичная проблема, нужно событие MouseMove над всеми контролами. На форме присутствуют treeView, над их скролами код из поста #2 не срабатывает.
Вообще мне нужно событие передвижения скрола treeView (или мыши над скролом treeView), но ничего не помогает: treeView1.MouseEnter treeView1.MouseMove срабатывают только после того как мышь пересечет скрол и войдет в список treeView.
Думал поможет код господина Петррр, но и он ни фурычит в данном контексте. Может кто подскажет как быть?
0
 Аватар для kesean
292 / 291 / 108
Регистрация: 04.09.2010
Сообщений: 638
06.01.2013, 15:51
Хук на мышь. Пример: http://www.codeproject.com/Art... Hooks-in-C
1
 Аватар для Doomer3D
180 / 180 / 32
Регистрация: 23.11.2012
Сообщений: 344
Записей в блоге: 1
06.01.2013, 17:18
Делать, как посоветовал Петррр - не стоит. Вешать на все контролы MouseMove - чистое безумтсво. Используйте хуки.
1
35 / 35 / 1
Регистрация: 14.11.2012
Сообщений: 176
07.01.2013, 10:26
Еще вопрос. Взял для использования этот пример. Но тут определение XY идет в статическом методе, как мне запустить функцию из него (из статик вроде ничего запустить нельзя)? Мне нужно событие при попадании XY в прямоугольник над скролом treeView (координаты скрола есть).
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
 
        //Declare the hook
        static int hHook = 0;
 
        //Declare the mouse hook constant.
        //Для других типов hook, вы можете получить эти значения из Winuser.h в Microsoft SDK
        public const int WH_MOUSE = 7;
        //private System.Windows.Forms.Button button1;
 
        //Declare MouseHookProcedure as a HookProc type.
        HookProc MouseHookProcedure;
 
        //Declare the wrapper managed POINT class.
        [StructLayout(LayoutKind.Sequential)]
        public class POINT
        {
            public int x;
            public int y;
        }
 
        //Declare the wrapper managed MouseHookStruct class.
        [StructLayout(LayoutKind.Sequential)]
        public class MouseHookStruct
        {
            public POINT pt;
            public int hwnd;
            public int wHitTestCode;
            public int dwExtraInfo;
        }
 
        //This is the Import for the SetWindowsHookEx function.
        //Use this function to install a thread-specific hook.
        [DllImport("user32.dll", CharSet = CharSet.Auto,
         CallingConvention = CallingConvention.StdCall)]
        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,
        IntPtr hInstance, int threadId);
 
        //This is the Import for the UnhookWindowsHookEx function.
        //Call this function to uninstall the hook.
        [DllImport("user32.dll", CharSet = CharSet.Auto,
         CallingConvention = CallingConvention.StdCall)]
        public static extern bool UnhookWindowsHookEx(int idHook);
 
        //This is the Import for the CallNextHookEx function.
        //Use this function to pass the hook information to the next hook procedure in chain.
        [DllImport("user32.dll", CharSet = CharSet.Auto,
         CallingConvention = CallingConvention.StdCall)]
        public static extern int CallNextHookEx(int idHook, int nCode,
        IntPtr wParam, IntPtr lParam);
 
        private void button1_Click(object sender, System.EventArgs e)
        {
            if (hHook == 0)
            {
                // Create an instance of HookProc.
                MouseHookProcedure = new HookProc(Form1.MouseHookProc);
 
                hHook = SetWindowsHookEx(WH_MOUSE,
                            MouseHookProcedure,
                            (IntPtr)0,
                            AppDomain.GetCurrentThreadId());
                //If the SetWindowsHookEx function fails.
                if (hHook == 0)
                {
                    MessageBox.Show("SetWindowsHookEx Failed");
                    return;
                }
                button1.Text = "UnHook Windows Hook";
            }
            else
            {
                bool ret = UnhookWindowsHookEx(hHook);
                //If the UnhookWindowsHookEx function fails.
                if (ret == false)
                {
                    MessageBox.Show("UnhookWindowsHookEx Failed");
                    return;
                }
                hHook = 0;
                button1.Text = "Set Windows Hook";
                this.Text = "Mouse Hook";
            }
        }
        public static int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            //Marshall the data from the callback.
            MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
 
            if (nCode < 0)
            {
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
            else
            {
                //Create a string variable that shows the current mouse coordinates.
                String strCaption = "x = " +
                        MyMouseHookStruct.pt.x.ToString("d") +
                            "  y = " +
                MyMouseHookStruct.pt.y.ToString("d");
                //You must get the active form because it is a static function.
                Form tempForm = Form.ActiveForm;
 
                //Set the caption of the form.
                tempForm.Text = strCaption;
                return CallNextHookEx(hHook, nCode, wParam, lParam);
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2013, 10:26
Помогаю со студенческими работами здесь

Определить, над каким окном находится курсор мыши
Всем знатокам доброго времени суток! Вопрос в заглавии. Спасибо за понимание.

Задать условие, что курсор мыши находится над кнопкой
Добрый день. На форме размещена кнопка. В toolStripStatusLabel высвечивается информация о перемещении курсора мыши. Подскажите как задать...

Проверка, находится ли мышка/курсор над полигоном или нет
Здравствуйте! Есть Image и его событие OnMouseMove На Image нарисован произвольный полигон. Как узнать, попадает ли указатель на...

Как узнать, над каким окном находится курсор мыши
Добрый день! Есть такая ситуация: из проекта на Лазарусе под WinCE запускается внешнее приложение. Его имя окна, и соответственно,...

Вывод static текста, когда курсор находится НАД контролом. как?
нужно научиться получать сообщения когда курсор находится над каком нибудь из контролов. пример во вложении. мышка над едитбоксом,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru