2016-04-27 3 views
1

У меня есть вопрос относительно C#, Winforms и «Прокрутка неактивных окон, когда я зависать над ними» в ОС Windows 10.Отключить Windows 10 «прокрутки неактивных окон» в C# Winforms

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

Когда количество элементов управления превышает размер панели макета потока, я получил AutoScroll = true, поэтому панель получает вертикальную полосу прокрутки. Я не хочу прокручивать панель с помощью колеса мыши, я хочу, чтобы пользователь вручную сделал это.

Все работает отлично в Windows 7, но в Windows 10, если у пользователя есть «Прокрутка неактивных окон при наведении на них», когда мышь находится над элементом управления, а пользователь использует колесо мыши, управляет увеличением или уменьшением масштаба, но панель также прокручивается.

Я отлаживал, и я обнаружил, что Win10 прокручивает панель еще до события MouseWheel формы/панели.

Как я могу временно отключить «Прокрутка неактивного ..» в моем коде? или, по крайней мере, отключить его поведение?

Спасибо!

+0

http://stackoverflow.com/questions/6983757/mousewheel-bubbling-up-in-winforms/6987339#6987339 –

ответ

0

Единственное, что приходит мне на ум, чтобы отключить поведение, это проверить, является ли окно TopMost или потерянным фокусом. Это можно сделать, используя form.TopMost объект илиActivated и Deactivate события. Используя события:

public Form1() 
    { 
     InitializeComponent(); 
     this.Deactivate += Form1_Deactivate; 
     this.Activated += Form1_Activated; 
    } 

    private void Form1_Activated(object sender, EventArgs e)//The form gained focus 
    { 
     panel1.Enabled = true; 
    } 

    private void Form1_Deactivate(object sender, EventArgs e)// The form lost focus 
    { 
     panel1.Enabled = false; 
    } 

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

Cheers.

+0

Вы также можете сохранить этот активированный/деактивированный статус в булевом (или просто проверить его? есть какой-то способ проверить его прямо?) и проверить, что в обработчике событий прокрутки, который отменяет событие, сразу же установив его «обработано». – Nyerguds