当前位置: 首页 > 编程语言 > C#

Trackbar仅在最终值而非时间值更改时触发事件Share

时间:2023-04-10 20:56:34 C#

Trackbar仅在最终值而非时间值更改时触发事件一些问题,因为我希望它使轨迹栏按我想要的方式运行,因此希望社区中的某个人可以为此提供解决方案。我有的是一个非常基本的应用程序,主要部分是一个轨道栏,其值从0到100。用户设置轨道的值来表示“要执行的工作量”,此时程序可以接触一些设备并告诉他们做“x”工作量(x是轨迹栏的值)。因此,我所做的是使用轨迹栏滚动事件来捕获轨迹栏值何时发生变化,并且处理程序在内部调用设备并告诉他们要做多少工作。我的问题是我的事件处理程序被调用用于跟踪栏当前位置和结束位置之间的每个值。因此,如果它从10滑到30,我的事件处理程序将被调用20次,这意味着我正在触摸我的设备并告诉它们运行一个我什至不希望它们运行的??值。当滚动停止发生时是否只有一个事件来检查最终值?如果用户点击了轨迹栏,只需检查变量。如果是这样,延迟输出。boolclicked=false;trackBar1.Scroll+=(s,e)=>{如果(点击)返回;Console.WriteLine(trackBar1.Value);};trackBar1.MouseDown+=(s,e)=>{clicked=true;};trackBar1.MouseUp+=(s,e)=>{如果(!点击)返回;点击=假;Console.WriteLine(trackBar1.Value);};LargeChange和SmallChange设置为0。尝试使用MouseCaptureChanged事件-这是此任务的最佳选择它。所有这些都是在“拇指移动”结束时注册的值实际上并不是用户期望的最终值的其他情况。听起来您需要一个按钮来确认更改,然后捕获轨迹栏的当前值并将其发送到您的设备。我发现一种相当可靠的方法是使用连接到trackbar.Scroll事件的计时器:privateTimer_scrollingTimer=null;privatevoidtrackbar_Scroll(objectsender,EventArgse){if(_scrollingTimer==null){//将每500mstick一次(根据需要更改)_scrollingTimer=newTimer(){Enabled=false,Interval=500,Tag=(senderasTrackBar).Value};_scrollingTimer.Tick+=(s,ea)=>{//检查自上次勾选后值是否发生变化if(trackBar.Value==(int)_scrollingTimer.Tag){//滚动停止所以我们很高兴继续做事_scrollingTimer.Stop();//在这里做事。.._scrollingTimer.Dispose();_scrollingTimer=null;}else{//记录最后看到的值_scrollingTimer.Tag=trackBar.Value;}};_scrollingTimer.Start();}}尝试使用trackbar_valuechanged事件处理程序:trackbar_valuechanged(s,e){if(trackbar.value==10){//做任何你想做的事情}else{//什么都不做或做其他事情}}我只是遇到了这个问题,因为我正在实施内置视频播放器,并希望用户能够更改视频的位置,但我不想发送每个SetPosition调用覆盖视频播放API以在用户前往他/她的最终目的地的路上标记用户。这是我的解决方案:首先,箭头键??有问题。您可以尝试使用计时器或其他机制来处理箭头键,但我发现这样做很痛苦,但不值得。因此,正如@Matthias提到的那样,将属性SmallChange和LargeChange设置为0。对于鼠标输入,用户必须单击、移动它并释放才能处理轨迹栏的MouseDown、MouseUp和Scroll事件,如下所示:privatebooltrackbarMouseDown=错误的;privatebooltrackbarScrolling=false;privatevoidtrackbarCurrentPosition_Scroll(objectsender,EventArgse){trackbarScrolling=true;}privatevoidtrackbarCurrentPosition_MouseUp(objectsender,MouseEventArgse){if(trackbarMouseDown==true&&trackbarScrolling==true)Playback.SetPosition(trackbarCurrentPosition.Value);;}privatevoidtrackbarCurrentPosition_MouseDown(objectsender,MouseEventArgse){trackbarMouseDown=true;我有一个类似的问题,只有一个范围内的TrackBar控件。同样的想法也适用于此,只是这种情况更容易。我处理TrackBar上的MouseUp事件以启动我需要的程序,只有在您释放鼠标按钮之后。如果您将栏拖动到您想要的位置或单击它,这将起作用。privatevoidrangeTrackBarControl1_MouseUp(objectsender,System.Windows.Forms.MouseEventArgse){YourProcedureHere();}以上为C#学习教程:轨迹条只触发最终值的事件,不触发时间值变化。很有用,需要多了解C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: