【问题标题】:What's the error with this VB code?这个VB代码有什么错误?
【发布时间】:2013-01-08 00:49:45
【问题描述】:

我正在尝试让标签的时间每秒更改一次以匹配正在播放的媒体的时间。

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    Dim remain As Int32 = AxWindowsMediaPlayer1.currentMedia.duration - AxWindowsMediaPlayer1.Ctlcontrols.currentPosition

    Dim Minutes As String

    Dim Secs As String

    Dim ElapsedTime As String

    Minutes = (remain / 60).ToString("00")

    Secs = (remain Mod 60).ToString("00.00")

    ElapsedTime = Minutes & "." & Secs

    Label1.Text = ElapsedTime ' Display the remaining time for the .wav file in a label in mm:ss format

    TrackBar2.Value = ElapsedTime (Error with this line: Conversion from string "11.26.00" to type 'Integer' is not valid.)

End Sub

我是否将字符串改为整数?

【问题讨论】:

  • TrackBar2.Value = 保留

标签: vb.net string visual-studio-2010 integer media-player


【解决方案1】:

我认为这是编译器无法隐式转换值的问题,我要么更改字符串的格式,要么执行以下操作:

Dim totalTime as Integer = 0
For Each thing In ElapsedTime.Split(".")
     totalTime += CInt(thing) 'So, "11.26.00" will turn into 11 + 26 + 0 = 37 for totalTime
Next

这只是一个简单的大纲,您可以根据需要进行任何额外的算术运算。

【讨论】:

    【解决方案2】:

    根据文档here,轨迹栏的值需要设置为介于最小值和最大值之间的整数

    如果您使用默认的最小值和最大值,则为 010,或者如果您已更改它们(显然),则为其他值。

    您需要弄清楚如何将时间字符串(或剩余时间整数,remain)更改为介于最小值和最大值之间的值,然后将值设置为该值。

    既然你有持续时间和位置,你可以使用类似的东西:

    Dim pos as Int32 = AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
    Dim tot as Int32 = AxWindowsMediaPlayer1.currentMedia.duration
    Dim tenthsToGo as Int32 = 10 * (tot - pos) / tot
    ' Now use tenthsToGo (or 10-tenthsToGo depending on direction) to set trackbar '
    

    如果您已将最大值设置为持续时间(并将最小值保留为零),如评论中所示,那么您可以简单地将轨迹栏值设置为当前位置(从 0 到最大值不等) )。

    【讨论】:

    • 好吧,我用这个设置最大值:Private Sub OpenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OpenToolStripMenuItem.Click OpenFileDialog1.ShowDialog() AxWindowsMediaPlayer1.URL = (OpenFileDialog1.FileName) Timer1.Interval = 1000 Timer1.Start() TrackBar2.Maximum = AxWindowsMediaPlayer1.currentMedia.duration End Sub
    • @NathanielWashburn,如果您将最大值设置为持续时间,那么您只需将轨迹栏值设置为当前位置(或持续时间小于当前位置,具体取决于所需的方向)。
    • 设置到当前位置是什么意思?编辑:我将其更改为TrackBar2.Value = AxWindowsMediaPlayer1.currentMedia.markerCount,但轨迹栏仍然没有移动,标签一直显示 11。
    • 其实从11到6到5到6到11。-.-
    • @NathanielWashburn,你为什么使用markercount?这与您通过文件的距离无关。
    【解决方案3】:

    您能否使用此代码显示媒体播放器的播放时间以及播放歌曲或视频的时长 4 英语不好

     TrackBar2.Maximum = AxWindowsMediaPlayer1.Ctlcontrols.currentItem.duration
            Label3.Text = AxWindowsMediaPlayer1.Ctlcontrols.currentPositionString
            TrackBar2.Value = AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
            Label4.Text = AxWindowsMediaPlayer1.Ctlcontrols.currentItem.durationString

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多