C# trackBar 拖动结束后触发事件

2020-05-19 13:43发布

想请教一下C#怎么实现TrackBar拖动释放鼠标之后再触发函数?
目前的自带的scroll和valuechange都是一旦数值改了就立马触发函数了,达不到想要的效果。

想请教一下C#怎么实现TrackBar拖动释放鼠标之后再触发函数?
目前的自带的scroll和valuechange都是一旦数值改了就立马触发函数了,达不到想要的效果。

3条回答
Ross
2楼 · 2020-05-19 14:06

Maximum属性:用来获取或设置TrackBar控件可表示的范围上限,即最大值。

Minimum属性:用来获取或设置TrackBar控件可表示的范围下限,即最小值。

SmallChange属性:用来获取或设置当滑块短距离移动时对Value属性进行增减的值。

Value属性:用来获取或设置滑块在跟踪条控件上的当前位置的值。------其他控件调取的主要方式。

Orientation属性:用来获取或设置一个值,该值指示跟踪条是在水平方向还是在垂直方向。

TickFrequency属性:用来获取或设置一个值,该值指定控件上绘制的刻度之间的增量。

AutoSize属性:默认值为True,自动调整控件的大小。False,自由调整控件的大小,即为可以调整长宽高。

 

TrackBar控件的常用事件是ValueChanged,该事件在TrackBar控件的Value属性值改变时发生时,重中之重

private void trackBar1_Scroll(object sender, EventArgs e)
        {
            textBoxX1.Text = trackBar1.Value.ToString();
        }
 

完事代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsApplication1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            if (timer1.Enabled == true)

            {

                timer1.Enabled = false;

                button1.Text = "开始";

            }

            else

            {

                timer1.Enabled = true;

                button1.Text = "停止";

            }

        }

 

        private void trackBar1_Scroll(object sender, EventArgs e)

        {

            //使用trackBar1调整步进速度,不能为零

            timer1.Interval = Convert.ToInt16(5000 / trackBar1.Value);

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (this.progressBar1.Value == this.progressBar1.Maximum)

            {

                this.progressBar1.Value = this.progressBar1.Minimum;

            }

            else

            {

                //主要是这个函数,步进

                this.progressBar1.PerformStep();

            }

            //计算百分比

            int intPercent;

            intPercent = 100 * (this.progressBar1.Value - this.progressBar1.Minimum) / (this.progressBar1.Maximum -this.progressBar1.Minimum);

            label1.Text = Convert.ToInt16(intPercent).ToString() + "%";

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            this.progressBar1.Maximum = 1000;

            this.progressBar1.Step = 10;

        }

    }

}

 

 


 参考地址:https://blog.csdn.net/valdo8/article/details/83792240


男孩无衣
3楼 · 2020-05-19 16:20

据我所知,无论什么框架里面, 对scroll和valuechangeed两个回调方法都是实时响应的, 没有原生机制能够减缓调用评率。 

按你说的需求, 只能手写逻辑,通过计时器,记录松手后n秒,再处理逻辑。

以下代码运行在Unity中,脚本挂在一个Slider组件上。 


image.png

是开心果呀 - 热爱生活
4楼 · 2021-11-05 11:47
试试 MouseUpprivate void trackBar1_MouseUp(object sender, MouseEventArgs e){
MessageBox.Show(trackBar1.Value.ToString());
}


相关问题推荐

没有解决我的问题,去提问