Прокрутка вызывает мерцание при управлении событиями MouseWheel - PullRequest
1 голос
/ 06 июля 2019

Я пытаюсь понять, что выполняется перед событием 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;
        }

Небольшое видео с подсветкой мерцания:

...