VB.NET 2008影音播放器开发指南
1. 创建基本窗体
vb
Imports System.Windows.Forms
Imports System.IO
Public Class MediaPlayerForm
Inherits Form
Private WithEvents btnOpen As New Button()
Private WithEvents btnPlay As New Button()
Private WithEvents btnPause As New Button()
Private WithEvents btnStop As New Button()
Private WithEvents axWindowsMediaPlayer As New AxWMPLib.AxWindowsMediaPlayer()
Public Sub New()
' 初始化窗体
Me.Text = "VB.NET 影音播放器"
Me.Size = New Size(800, 600)
' 添加Windows Media Player控件
Me.Controls.Add(axWindowsMediaPlayer)
axWindowsMediaPlayer.Dock = DockStyle.Fill
' 添加控制按钮
SetupControls()
End Sub
Private Sub SetupControls()
' 按钮设置
btnOpen.Text = "打开文件"
btnPlay.Text = "播放"
btnPause.Text = "暂停"
btnStop.Text = "停止"
' 按钮布局
Dim panel As New FlowLayoutPanel()
panel.Dock = DockStyle.Bottom
panel.Height = 40
panel.Controls.AddRange({btnOpen, btnPlay, btnPause, btnStop})
Me.Controls.Add(panel)
End Sub
End Class
2. 添加Windows Media Player控件
在工具箱上右键点击,选择"选择项"
在COM组件选项卡中找到"Windows Media Player"
勾选并确定,这样工具箱中就会出现该控件
核心功能实现
1. 打开媒体文件
vb
Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
Dim openFileDialog As New OpenFileDialog()
' 设置文件过滤器
openFileDialog.Filter = "媒体文件|*.mp3;*.wav;*.mp4;*.avi;*.wmv|所有文件|*.*"
If openFileDialog.ShowDialog() = DialogResult.OK Then
Try
axWindowsMediaPlayer.URL = openFileDialog.FileName
Catch ex As Exception
MessageBox.Show("无法播放文件: " & ex.Message)
End Try
End If
End Sub
2. 播放控制功能
vb
Private Sub btnPlay_Click(sender As Object, e As EventArgs) Handles btnPlay.Click
If axWindowsMediaPlayer.playState <> WMPLib.WMPPlayState.wmppsPlaying Then
axWindowsMediaPlayer.Ctlcontrols.play()
End If
End Sub
Private Sub btnPause_Click(sender As Object, e As EventArgs) Handles btnPause.Click
If axWindowsMediaPlayer.playState = WMPLib.WMPPlayState.wmppsPlaying Then
axWindowsMediaPlayer.Ctlcontrols.pause()
End If
End Sub
Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
axWindowsMediaPlayer.Ctlcontrols.stop()
End Sub
高级功能扩展
1. 播放列表功能
vb
Private WithEvents lstPlaylist As New ListBox()
Private playlist As New List(Of String)()
Private Sub SetupPlaylist()
lstPlaylist.Dock = DockStyle.Right
lstPlaylist.Width = 200
Me.Controls.Add(lstPlaylist)
' 双击播放列表项播放
AddHandler lstPlaylist.DoubleClick, AddressOf PlaySelectedItem
End Sub
Private Sub PlaySelectedItem(sender As Object, e As EventArgs)
If lstPlaylist.SelectedIndex >= 0 Then
axWindowsMediaPlayer.URL = playlist(lstPlaylist.SelectedIndex)
axWindowsMediaPlayer.Ctlcontrols.play()
End If
End Sub
' 修改打开文件方法以支持多文件选择
Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Multiselect = True
openFileDialog.Filter = "媒体文件|*.mp3;*.wav;*.mp4;*.avi;*.wmv|所有文件|*.*"
If openFileDialog.ShowDialog() = DialogResult.OK Then
For Each file In openFileDialog.FileNames
playlist.Add(file)
lstPlaylist.Items.Add(Path.GetFileName(file))
Next
End If
End Sub
2. 音量控制
vb
Private WithEvents trackVolume As New TrackBar()
Private Sub SetupVolumeControl()
trackVolume.Dock = DockStyle.Bottom
trackVolume.Height = 40
trackVolume.Minimum = 0
trackVolume.Maximum = 100
trackVolume.Value = 50
axWindowsMediaPlayer.settings.volume = 50
Me.Controls.Add(trackVolume)
trackVolume.BringToFront()
End Sub
Private Sub trackVolume_Scroll(sender As Object, e As EventArgs) Handles trackVolume.Scroll
axWindowsMediaPlayer.settings.volume = trackVolume.Value
End Sub
3. 进度条控制
vb
Private WithEvents trackProgress As New TrackBar()
Private isSeeking As Boolean = False
Private Sub SetupProgressBar()
trackProgress.Dock = DockStyle.Bottom
trackProgress.Height = 40
Me.Controls.Add(trackProgress)
trackProgress.BringToFront()
' 定时器更新进度
Dim timer As New Timer()
timer.Interval = 500
AddHandler timer.Tick, AddressOf UpdateProgress
timer.Start()
End Sub
Private Sub UpdateProgress(sender As Object, e As EventArgs)
If Not isSeeking AndAlso axWindowsMediaPlayer.currentMedia IsNot Nothing Then
trackProgress.Maximum = CInt(axWindowsMediaPlayer.currentMedia.duration * 1000)
trackProgress.Value = CInt(axWindowsMediaPlayer.Ctlcontrols.currentPosition * 1000)
End If
End Sub
Private Sub trackProgress_MouseDown(sender As Object, e As MouseEventArgs) Handles trackProgress.MouseDown
isSeeking = True
End Sub
Private Sub trackProgress_MouseUp(sender As Object, e As MouseEventArgs) Handles trackProgress.MouseUp
If isSeeking AndAlso axWindowsMediaPlayer.currentMedia IsNot Nothing Then
axWindowsMediaPlayer.Ctlcontrols.currentPosition = trackProgress.Value / 1000
isSeeking = False
End If
End Sub
完整示例代码
vb
Imports System.Windows.Forms
Imports System.IO
Public Class MediaPlayerForm
Inherits Form
Private WithEvents btnOpen As New Button()
Private WithEvents btnPlay As New Button()
Private WithEvents btnPause As New Button()
Private WithEvents btnStop As New Button()
Private WithEvents axWindowsMediaPlayer As New AxWMPLib.AxWindowsMediaPlayer()
Private WithEvents lstPlaylist As New ListBox()
Private WithEvents trackVolume As New TrackBar()
Private WithEvents trackProgress As New TrackBar()
Private playlist As New List(Of String)()
Private isSeeking As Boolean = False
Public Sub New()
' 初始化窗体
Me.Text = "VB.NET 影音播放器"
Me.Size = New Size(800, 600)
' 添加Windows Media Player控件
Me.Controls.Add(axWindowsMediaPlayer)
axWindowsMediaPlayer.Dock = DockStyle.Fill
' 设置控制界面
SetupControls()
SetupPlaylist()
SetupVolumeControl()
SetupProgressBar()
End Sub
Private Sub SetupControls()
' 按钮设置
btnOpen.Text = "打开文件"
btnPlay.Text = "播放"
btnPause.Text = "暂停"
btnStop.Text = "停止"
' 按钮布局
Dim panel As New FlowLayoutPanel()
panel.Dock = DockStyle.Bottom
panel.Height = 40
panel.Controls.AddRange({btnOpen, btnPlay, btnPause, btnStop})
Me.Controls.Add(panel)
End Sub
Private Sub SetupPlaylist()
lstPlaylist.Dock = DockStyle.Right
lstPlaylist.Width = 200
Me.Controls.Add(lstPlaylist)
AddHandler lstPlaylist.DoubleClick, AddressOf PlaySelectedItem
End Sub
Private Sub SetupVolumeControl()
trackVolume.Dock = DockStyle.Bottom
trackVolume.Height = 40
trackVolume.Minimum = 0
trackVolume.Maximum = 100
trackVolume.Value = 50
axWindowsMediaPlayer.settings.volume = 50
Me.Controls.Add(trackVolume)
trackVolume.BringToFront()
End Sub
Private Sub SetupProgressBar()
trackProgress.Dock = DockStyle.Bottom
trackProgress.Height = 40
Me.Controls.Add(trackProgress)
trackProgress.BringToFront()
Dim timer As New Timer()
timer.Interval = 500
AddHandler timer.Tick, AddressOf UpdateProgress
timer.Start()
End Sub
' 事件处理方法
Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Multiselect = True
openFileDialog.Filter = "媒体文件|*.mp3;*.wav;*.mp4;*.avi;*.wmv|所有文件|*.*"
If openFileDialog.ShowDialog() = DialogResult.OK Then
For Each file In openFileDialog.FileNames
playlist.Add(file)
lstPlaylist.Items.Add(Path.GetFileName(file))
Next
End If
End Sub
Private Sub btnPlay_Click(sender As Object, e As EventArgs) Handles btnPlay.Click
If axWindowsMediaPlayer.playState <> WMPLib.WMPPlayState.wmppsPlaying Then
axWindowsMediaPlayer.Ctlcontrols.play()
End If
End Sub
Private Sub btnPause_Click(sender As Object, e As EventArgs) Handles btnPause.Click
If axWindowsMediaPlayer.playState = WMPLib.WMPPlayState.wmppsPlaying Then
axWindowsMediaPlayer.Ctlcontrols.pause()
End If
End Sub
Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
axWindowsMediaPlayer.Ctlcontrols.stop()
End Sub
Private Sub PlaySelectedItem(sender As Object, e As EventArgs)
If lstPlaylist.SelectedIndex >= 0 Then
axWindowsMediaPlayer.URL = playlist(lstPlaylist.SelectedIndex)
axWindowsMediaPlayer.Ctlcontrols.play()
End If
End Sub
Private Sub trackVolume_Scroll(sender As Object, e As EventArgs) Handles trackVolume.Scroll
axWindowsMediaPlayer.settings.volume = trackVolume.Value
End Sub
Private Sub UpdateProgress(sender As Object, e As EventArgs)
If Not isSeeking AndAlso axWindowsMediaPlayer.currentMedia IsNot Nothing Then
trackProgress.Maximum = CInt(axWindowsMediaPlayer.currentMedia.duration * 1000)
trackProgress.Value = CInt(axWindowsMediaPlayer.Ctlcontrols.currentPosition * 1000)
End If
End Sub
Private Sub trackProgress_MouseDown(sender As Object, e As MouseEventArgs) Handles trackProgress.MouseDown
isSeeking = True
End Sub
Private Sub trackProgress_MouseUp(sender As Object, e As MouseEventArgs) Handles trackProgress.MouseUp
If isSeeking AndAlso axWindowsMediaPlayer.currentMedia IsNot Nothing Then
axWindowsMediaPlayer.Ctlcontrols.currentPosition = trackProgress.Value / 1000
isSeeking = False
End If
End Sub
' 主程序入口
Public Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New MediaPlayerForm())
End Sub
End Class
部署注意事项
1.确保目标计算机安装了Windows Media Player
2.如果是64位系统,可能需要设置项目为x86平台目标
3.部署时包含Interop.WMPLib.dll和AxInterop.WMPLib.dll