Поведение Microsoft VSrollBar или ошибка с сенсорным экраном - формы Windows

Я обнаружил странное поведение с VScrollBar (вертикальная полоса прокрутки доступна в наборе инструментов Visual Studio). Проблема в "если я проведу вниз по полосе прокрутки, она поднимется вверх. Если я проведу вверх, он движется вниз».

Шаги для воспроизведения ошибки или поведения - 1

1) Добавьте VScrollBar как дочерний элемент к любому пользовательскому элементу управления.

2) Проведите вверх или вниз по пользовательскому элементу управления (не по полосе прокрутки). Вертикальная полоса прокрутки перемещается в противоположном направлении, даже если между контентом и VScrollBar нет программной связи

Шаги для воспроизведения ошибки или поведения - 2

1) Добавьте VScrollBar как дочерний элемент к любому пользовательскому элементу управления.

2) Проведите по полосе прокрутки, она будет двигаться вверх во время пролистывания вверх и вниз во время пролистывания вниз (правильное поведение)

3) Проведите вверх или вниз по пользовательскому элементу управления. Вертикальная полоса прокрутки перемещается в противоположном направлении

4) Теперь проведите вверх или вниз по вертикальной полосе прокрутки. Вертикальная полоса прокрутки начинает двигаться в противоположном направлении (багги поведение, происходит только после ошибки № 1)

Простое управление с вертикальной полосой прокрутки, чтобы повторить это поведение

public class QuickViewer : Control
{
    public QuickViewer()
    {
        // Designer generated code
        // Copy pasted for illustration alone

        this.vScrollBar1 = new System.Windows.Forms.VScrollBar();
        this.SuspendLayout();
        // 
        // vScrollBar1
        // 
        this.vScrollBar1.Location = new System.Drawing.Point(420, 4);
        this.vScrollBar1.Name = "vScrollBar1";
        this.vScrollBar1.Size = new Size(this.vScrollBar1.Width, 292);            
        // 
        // QuickViewer
        //             
        this.Controls.Add(this.vScrollBar1);
        this.Name = "QuickViewer";
        this.Size = new System.Drawing.Size(441, 296);
        this.vScrollBar1.Value = 5;        
        this.ResumeLayout(false);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        //My actual control is different. I prepared a simple control to replicate the buggy behavior of VScrollBar

        //Control border
        Pen borderPen = new Pen(Color.LawnGreen, 5);
        e.Graphics.DrawRectangle(borderPen, ClientRectangle);
        borderPen.Dispose();

        //View area
        Rectangle rect = new Rectangle(ClientRectangle.Location, ClientRectangle.Size);
        rect.Inflate(-25, -10);
        e.Graphics.FillRectangle(Brushes.White, rect);
        e.Graphics.DrawRectangle(Pens.Black, rect);
        this.Font = new System.Drawing.Font("Segoe UI", 12, FontStyle.Bold);
        StringFormat format = new StringFormat() { Alignment = StringAlignment.Center };
        e.Graphics.DrawString("Quick viewer", this.Font, Brushes.Black, rect, format);
        string content = "This is a control created to illustrate the bug in VScrollBar." +
            "\n Control area refers to the area with white background" +
            "\n Control and Vertical Scrollbar are not programatically connected with each other."
            + "But still VScrollBar moves if you swipe on control area";

        Font font = new System.Drawing.Font("Segoe UI", 12, FontStyle.Italic);
        rect.Y += 20;
        e.Graphics.DrawString(content, font, Brushes.Black, rect, format);

        font.Dispose();
        format.Dispose();
        base.OnPaint(e);
    }

    /// <summary> 
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary> 
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }


    private System.Windows.Forms.VScrollBar vScrollBar1;

}

Вопрос:

Есть ли способ преодолеть это поведение или ошибку? Я хочу, чтобы полоса прокрутки двигалась вниз, когда проводишь вниз, и двигалась вверх, когда проводишь вверх. При перелистывании содержимого не должно быть прокрутки

Ответы на вопрос(2)

Ваш ответ на вопрос