Я пытаюсь понять, что выполняется перед событием MouseWheel.
Что я сделал:
- У меня есть форма, для которой свойство AutoScroll установлено в значение true. Вверху и внизу этой формы находится элемент управления (ЗЕДГРАФ).
- Чтобы преодолеть проблему одновременной прокрутки и масштабирования, я записал
mousewheel += new MouseEvenHandler(mymethod)
для формы. Затем с помощью переменной bool я отслеживаю, когда элемент управления (ZEDGRAPH) имеет фокус, а когда - нет.
- Когда у него есть фокус, я делаю
verticalscroll.value = (int)mydesiredposition;
Это работает, выполняя то, что я хотел - игнорировать событие колесика мыши в форме и фокусироваться на элементе управления.
С чем я борюсь, так это с тем фактом, что при прокрутке форма каждый раз мерцает и прокручивается вниз, прежде чем перейти к заданному значению полосы прокрутки.
Так что мне интересно, что происходит перед этим mouseeventhandler, что вызывает его мерцание и есть ли относительно простой обходной путь?
Мой снимок кода:
public Form(Form1 f)
{
InitializeComponent();
this.MouseWheel += new MouseEventHandler(mousewheel);
}//end of constructor
//
//
bool mousehoverZedGraph1 = false;
bool mousehoverZedGraph2 = false;
//
//
private void zedGraphControl1_MouseHover(object sender, EventArgs e)
{
mousehoverZedGraph1 = true;
return;
}
private void mousewheel(object sender, MouseEventArgs e)
{
if (mousehoverZedGraph1 == true)
{
VerticalScroll.Enabled = false;
VerticalScroll.Value = 0;
return;
}
else if (mousehoverZedGraph2 == true)
{
VerticalScroll.Value = 429;
VerticalScroll.Enabled = false;
}
else
{
//VerticalScroll.Value += e.Delta;
}
}
private void Form_MouseEnter(object sender, EventArgs e)
{
mousehoverZedGraph1 = mousehoverZedGraph2 = false;
VerticalScroll.Enabled = true;
}
Небольшое видео с подсветкой мерцания: