我这个逼又来了。请问winform的这个TrackBar滑动条怎么搞?

maya8maya85 2016-04-11 06:19:03
首先,这个"Bar"好像是“胸罩”的意思?我有没有记错?
说正题了
我用了个VLC的播放器,我要说的不是这个播放器播放的问题,因为我都处理好了,我的问题是这个播放进度滑动条的事,是这个控件的事。
先给个图吧

现在播放器里有一个Timer。设置了每秒更新一次播放进度滑动条,所以显示播放进度是没有问题的。
我希望点击滑动条可以直接跳动那个位置进行播放,并更新播放进度滑动条的位置。但
现在滑动是滑动了,但下一秒,滑动条的位置又回到刚才的播放进度那里进行一秒一秒的走,而不是我点击的地方。
我把关键代码放上来,看那位大神,有经验的来帮忙一下,送上40分

//定义
private int ThisIndex = 0;
private int ThisAll = 0;
//更新进条事件。就是Timer的事件
public void Time()
{
if (is_playinig_)
{
if (ThisIndex == ThisAll)//播放结束
{
DemoPlayer.Stop();
Timer.Stop();
LabelPlayTime.Text = "00:00:00 / 00:00:00";
PlayProgressBar.Value = 0;
}
else
{
ThisIndex++;
double alnun = Convert.ToDouble(ThisIndex) / Convert.ToDouble(ThisAll);
double alnum2 = alnun * Convert.ToDouble(1000);
PlayProgressBar.Value = (int)alnum2;
LabelPlayTime.Text = string.Format("{0} / {1}",
GetTimeString(ThisIndex),
GetTimeString(ThisAll));
}
}
}
//点击滑动条事件
private void PlayProgressBar_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
double mousetime = e.X;
double time = (mousetime / 1000) * ThisAll;
DemoPlayer.SetPlayTime(time);
PlayProgressBar.Value = (int)mousetime;
ThisIndex = (int)time;
}
}

还有,我没有找到MouseClick事件,所以用了MouseDown,应该是可以的吧?
...全文
653 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maya8maya85 2016-04-11
  • 打赏
  • 举报
回复
引用 3 楼 shingoscar 的回复:
补充下:如果是偶尔会出现这个问题,可能是线程引起的 ThisIndex++; 改成 Interlocked.Increment(ref ThisIndex); ThisIndex = (int)time; 改成 Interlocked.Exchange(ref ThisIndex, (int)time);
我没有使用多线程技术啊
Poopaye 2016-04-11
  • 打赏
  • 举报
回复
补充下:如果是偶尔会出现这个问题,可能是线程引起的 ThisIndex++; 改成 Interlocked.Increment(ref ThisIndex); ThisIndex = (int)time; 改成 Interlocked.Exchange(ref ThisIndex, (int)time);
Poopaye 2016-04-11
  • 打赏
  • 举报
回复
肯定有别的地方把ThisIndex改回去了呗
大鱼> 2016-04-11
  • 打赏
  • 举报
回复
就不告诉你,就不告诉你。。。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧