Задержка действия при удерживании кнопки мыши на объекте формы (собственный класс)
В последнее время, используя множество примеров и советов (я учусь), мне удалось создать свой собственный класс управления для формы .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();
}
Я не могу получить значение, выводимое на метку, когда мышь нажимается и удерживается без движения. Значение отображается только после отпускания, но мне это не нравится. У меня также есть многократный рендеринг метки (значение, видимо, постоянно меняется).
Я готов дать любые пояснения.
Пожалуйста, помогите понять, научите. Поблагодарить.