Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467

OnMouseXXX events

12.06.2017, 20:11. Показов 1398. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Форма у меня поверх всех окон, не ловит фокус и прозрачна для кликов.
Хочу вот что - клики форма должна принимать только заданную клавиши мыши. (для неё эмулируем нажатие правой, поскольку контролы принимают только её, все остальные отсекаем).
Переопределяю MouseDown - один раз срабатывает и всё.
Сами контролы по отдельности ловят событие нормально.
Что я сделал не так?, спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2017, 20:11
Ответы с готовыми решениями:

Events
Доброго времени суток. Я вообще к изучению ивентов пока приступать не планировал, делегаты то еще плохо понимаю, но при написании...

динамические events
здравствуйте. есть на форме один richtexbox1, и для него событие private void richTextBox1_MouseDown(object sender, MouseEventArgs e) ...

Button events
Учу Core MVC и что то вообще не разобрался с кнопочными событиями. Раньше в html файле рисовалась кнопка, а обработка события происходила в...

1
139 / 139 / 53
Регистрация: 14.06.2016
Сообщений: 467
14.06.2017, 15:45  [ТС]
Лучший ответ Сообщение было отмечено jr_ как решение

Решение

Апну.
Руки дошли поглядеть, выяснил вот что - форма игнорирует клики который были обработаны контролами.
Сразу задумалось такое
C#
1
2
3
internal interface IAllowClick {
    event AllowClickEventHandler AllowClick;
}
А вот контрол
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[ToolboxItem(true)]
internal class WidgetButton : Button, IAllowClick {
    public event AllowClickEventHandler AllowClick;
 
    protected override void OnMouseDown(MouseEventArgs e) {
        var data = new AllowClickEventArgs(e);
        AllowClick?.Invoke(this, data);
        if (data.Allow) {
            e = new MouseEventArgs(MouseButtons.Left, e.Clicks, e.X, e.Y, e.Delta);
            base.OnMouseDown(e);
        }
    }
 
    protected override void OnMouseUp(MouseEventArgs e) {
        var data = new AllowClickEventArgs(e);
        AllowClick?.Invoke(this, data);
        if (data.Allow) {
            e = new MouseEventArgs(MouseButtons.Left, e.Clicks, e.X, e.Y, e.Delta);
            base.OnMouseUp(e);
        }
    }
}
ну и обработка
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
foreach (var ctrl in this.GetControls().OfType<IAllowClick>()) {
    ctrl.AllowClick += Ctrl_AllowClick;
}
 
private void Ctrl_AllowClick(object sender, AllowClickEventArgs e) {
    switch (CurrentSettings.MouseMode) {
        case ClickMouseMode.Left:
            e.Allow = e.Button == MouseButtons.Left;
            break;
 
        case ClickMouseMode.Right:
            e.Allow = e.Button == MouseButtons.Right;
            break;
 
        case ClickMouseMode.Both:
            e.Allow = e.Button == MouseButtons.Left || e.Button == MouseButtons.Right;
            break;
    }
}
Впринципе, это то что я хотел, вот только не нравится мне, что придется для каждого типа (ну их всего штук 5, но это не точно) реализовывать наследника с подобным однотипным кодом.
Кто что посоветует?

Добавлено через 42 минуты
Впрочем, не актуально
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.06.2017, 15:45
Помогаю со студенческими работами здесь

User Control + Events
Создал пользовательский контрол(наследовал от user control). Поместил на него лейбл и ПикчерБокс. Хочу, чтобы при наведении/щелчке...

Разница между events и multicast delegates?
В чем разница между событиями и многоадресными делегатами?

Remoting, удаленный вызов Events: Нет доступа к свойствам и методам объектов
При использовании (.NET Remoting) Singleton-объектов (которые совместно используют данные), доступ к свойствам и методам объектов у меня...

Inline events
Почему не работает следующий код (нашел в учебнике): &lt;html&gt; &lt;head&gt; &lt;title&gt; JavaScript Event Example &lt;/title&gt; ...

Button Events
Подскажите какие события нужны для: Нажатии и удержании кнопки на форме по идее... onkeypress -не работает. при отжатии кнопки на...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Перейдите по ссылке:. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru