【问题标题】:How to record trackBar last value and the current value find the different and assign to the labels all the numbers between last and current values?如何记录 trackBar 的最后一个值和当前值找到不同之处并将最后一个值和当前值之间的所有数字分配给标签?
【发布时间】:2023-02-01 19:11:19
【问题描述】:

包括上次和当前值。 当前代码未更改标签文本。

目标是无论我向左或向右移动鼠标的速度有多快,都可以捕获 trackBar 值。

我尝试使用鼠标上下事件,但效果不佳。 不确定如何使用事件进行计算。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sliders
{
    public partial class Form1 : Form
    {
        Label[] tile = new Label[11];

        int oldValue = 0;
        int lastValue = 0;

        public Form1()
        {
            InitializeComponent();

            oldValue = macTrackBar1.Value;

            for (int i = 0; i < tile.Length; i++)
            {
                tile[i] = new Label();
                tile[i].Height = 18;
                tile[i].Width = 10;
                tile[i].Left = 0;
                tile[i].Top = i * 20;
                tile[i].Text = i.ToString();
                tile[i].Visible = true;
                Controls.Add(tile[i]);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void macTrackBar1_ValueChanged(object sender, decimal value)
        {
            if(lastValue > oldValue)
            {
                int newValue = lastValue - oldValue;

                for(int i = 0; i < newValue; i++)
                {
                    tile[i].Text = i.ToString();
                }
            }
        }

        private void macTrackBar1_MouseUp(object sender, MouseEventArgs e)
        {
            lastValue = macTrackBar1.Value;
        }

        private void macTrackBar1_MouseDown(object sender, MouseEventArgs e)
        {
            oldValue = macTrackBar1.Value;
        }
    }
}

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您需要将 lastValue = macTrackBar1.Value; 放入 macTrackBar1_ValueChanged 事件。其次 private void macTrackBar1_ValueChanged(object sender, decimal value) 不是有效的事件处理程序我认为你需要像 private void macTrackBar1_ValueChanged(object sender, EventArgs e)

     private void macTrackBar1_ValueChanged(object sender, decimal value)
        {
            lastValue = macTrackBar1.Value;
            if(lastValue > oldValue)
            {
                
                int newValue = lastValue - oldValue;
    
                for(int i = 0; i < newValue; i++)
                {
                    tile[i].Text = i.ToString();
                }
            }
        }
    
        private void macTrackBar1_MouseUp(object sender, MouseEventArgs e)
        {
            
        }
    
        private void macTrackBar1_MouseDown(object sender, MouseEventArgs e)
        {
            oldValue = macTrackBar1.Value;
        }
    

    标签没有改变,因为您将相同的文本放入其中。始终为它们放置相同的索引值。 尝试:

    tile[i].Text = newValue.ToString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2021-04-29
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2018-06-29
      相关资源
      最近更新 更多