Задержка действия при удерживании кнопки мыши на объекте формы (собственный класс)

В последнее время, используя множество примеров и советов (я учусь), мне удалось создать свой собственный класс управления для формы .Net. Полный код управления введите сюда код

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

Если попытаться упростить код, управление этим процессом будет выглядеть так:

class Seasonality_ProgressBar : Control

Stopwatch st = new Stopwatch();
MouseButtons mb = MouseButtons.None;

public Seasonality_ProgressBar()
{
}

protected override void OnMouseDown(MouseEventArgs e)
{
   // base.OnMouseDown(e);
    if (!st.IsRunning)
    {
        mb = e.Button;
        st.Start();

        if (e.Button == mb)
        {
            x = e.X;
            y = e.Y;
            timer.Elapsed += OnTimedEvent;
            timer.Start();
        }
    }
    base.OnMouseDown(e);
}


 private void OnTimedEvent(Object source, ElapsedEventArgs e)
 {
     timer.Stop();
     //MessageBox.Show("Сработало");
     float reultation = x - y;
     if (reultation > 0)
     {
         Value = "A";
     }
     else
     {
         Value = "B";
     }
 }

Видно, что через некоторое время метод запускается по таймеру. Затем я попытался поместить экземпляр этого класса в форму вместе с меткой, на которой я хотел отразить значение, полученное на ProgressBar. Я сделал такие звонки:

private void seasonality_ProgressBar1_MouseUp(object sender, MouseEventArgs e)
    {
        label2.Text = (-seasonality_ProgressBar1.Value).ToString();
    }

    private void seasonality_ProgressBar1_MouseMove(object sender, MouseEventArgs e)
    {
        label2.Text = (-seasonality_ProgressBar1.Value).ToString();
    }

    private void seasonality_ProgressBar1_MouseDown(object sender, MouseEventArgs e)
    {

        //MessageBox.Show("Привет");

        label2.Text = (-seasonality_ProgressBar1.OnTimedEventValue).ToString();
        int A = 0;
    }

    private void seasonality_ProgressBar1_Click_1(object sender, EventArgs e)
    {
        label2.Text = (-seasonality_ProgressBar1.Value).ToString();
    }

Я не могу получить значение, выводимое на метку, когда мышь нажимается и удерживается без движения. Значение отображается только после отпускания, но мне это не нравится. У меня также есть многократный рендеринг метки (значение, видимо, постоянно меняется).

Я готов дать любые пояснения.

Пожалуйста, помогите понять, научите. Поблагодарить.


Ответы (0 шт):