質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

456閲覧

音楽プレイヤーでリストボックスの前の曲に

退会済みユーザー

退会済みユーザー

総合スコア0

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/04/01 11:45

編集2018/04/01 14:54

音楽プレイヤーでリストボックスの曲に戻る時におかしくなります

初めまして質問させていただきます。
音楽プレイヤーを作ってます。
リストボックスで前の曲に戻る時おかしくなりました。
###原因となっているコード

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Try ListBox2.SelectedIndex += -1 AxWindowsMediaPlayer2.Ctlcontrols.previous() AxWindowsMediaPlayer2.Ctlcontrols.play() ProgressBar1.Value = 0 Timer1.Start() Timer2.Start() Catch ex As Exception MessageBox.Show("曲がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) AxWindowsMediaPlayer2.Ctlcontrols.stop() Timer1.Stop() Timer2.Stop() End Try End Sub

###作成中のform全体

Imports System.IO Imports System Public Class Music00b Private history As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk Dim files = OpenFileDialog1.FileNames Dim conflict = files.Where(AddressOf history.Contains) If conflict.Any() Then e.Cancel = True Dim fileNames = conflict.Select(AddressOf System.IO.Path.GetFileName) MessageBox.Show("同じファイルがあります。" & vbCrLf & String.Join(vbCrLf, fileNames), "競合", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Else Array.ForEach(files, AddressOf history.Add) End If End Sub Private Sub Music00b_Load(sender As Object, e As EventArgs) Handles MyBase.Load AxWindowsMediaPlayer2.Hide() TextBox1.ReadOnly = True TextBox2.ReadOnly = True TextBox3.ReadOnly = True TextBox2.ReadOnly = True PictureBox1.Enabled = False PictureBox2.Enabled = False PictureBox3.Enabled = False PictureBox4.Enabled = False PictureBox5.Enabled = False ListBox2.Hide() Label1.Hide() End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ProgressBar1.Value = 0 TextBox2.Text = TimeSpan.FromSeconds(AxWindowsMediaPlayer2.Ctlcontrols.currentPosition).ToString("mm\:ss") Me.Timer1.Enabled = False Me.Timer2.Enabled = True End Sub Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick Dim length As Integer Dim current As Integer length = If(AxWindowsMediaPlayer2.currentMedia?.duration, 0) current = AxWindowsMediaPlayer2.Ctlcontrols.currentPosition ProgressBar1.Value = current ProgressBar1.Maximum = length If ProgressBar1.Value = 100 Then ProgressBar1.Value = 0 End If End Sub Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick TextBox2.Text = TimeSpan.FromSeconds(AxWindowsMediaPlayer2.Ctlcontrols.currentPosition).ToString("mm\:ss") End Sub Dim Open00a As String() Dim file As String() Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click AxWindowsMediaPlayer2.settings.autoStart = False OpenFileDialog1.FileName = "" OpenFileDialog1.Multiselect = True OpenFileDialog1.Title = "開くファイルを指定" OpenFileDialog1.Filter = "MP3(*.mp3)|*.mp3|全てのファイル (*.*)|*.*" OpenFileDialog1.FilterIndex = 1 OpenFileDialog1.RestoreDirectory = True If OpenFileDialog1.ShowDialog() = DialogResult.OK Then file = OpenFileDialog1.SafeFileNames Open00a = OpenFileDialog1.FileNames For b As Integer = 0 To file.Length - 1 ListBox2.Items.Add(file(b)) AxWindowsMediaPlayer2.currentPlaylist.appendItem(AxWindowsMediaPlayer2.newMedia(b)) Next ListBox2.SelectedIndex = 0 TextBox1.Text = System.IO.Path.GetFileName(ListBox2.SelectedItem) End If End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click '全てクリアされる history.Clear() ListBox2.Items.Clear() TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() Button2.Enabled = True AxWindowsMediaPlayer2.Ctlcontrols.stop() AxWindowsMediaPlayer2.currentPlaylist.clear() Timer1.Stop() Timer2.Stop() Timer3.Stop() ProgressBar1.Value = 0 MessageBox.Show("リストクリアーしました。", "報告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) End Sub Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click AxWindowsMediaPlayer2.Ctlcontrols.play() TextBox1.Text = System.IO.Path.GetFileName(ListBox2.SelectedItem) Timer1.Start() Timer2.Start() Timer1.Enabled = True End Sub Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click AxWindowsMediaPlayer2.Ctlcontrols.pause() End Sub Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click AxWindowsMediaPlayer2.Ctlcontrols.stop() ProgressBar1.Value = 0 End Sub Private Sub PictureBox4_Click(sender As Object, e As EventArgs) Handles PictureBox4.Click Try ListBox2.SelectedIndex += -1 AxWindowsMediaPlayer2.Ctlcontrols.previous() AxWindowsMediaPlayer2.Ctlcontrols.play() ProgressBar1.Value = 0 Timer1.Start() Timer2.Start() Catch ex As Exception MessageBox.Show("曲がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) AxWindowsMediaPlayer2.Ctlcontrols.stop() Timer1.Stop() Timer2.Stop() End Try End Sub Private Sub PictureBox5_Click(sender As Object, e As EventArgs) Handles PictureBox5.Click Try ListBox2.SelectedIndex += +1 AxWindowsMediaPlayer2.Ctlcontrols.next() AxWindowsMediaPlayer2.Ctlcontrols.play() ProgressBar1.Value = 0 Timer1.Start() Timer2.Start() Catch ex As Exception MessageBox.Show("曲がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) End Try End Sub Private Sub HScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles HScrollBar1.Scroll AxWindowsMediaPlayer2.settings.volume = HScrollBar1.Value Lb2.Text = "" & HScrollBar1.Value End Sub Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As System.Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer2.PlayStateChange Try Dim wa As Integer wa = ListBox2.SelectedIndex If AxWindowsMediaPlayer2.currentMedia.isIdentical(AxWindowsMediaPlayer2.currentPlaylist.Item(wa)) Then End If Timer1.Start() Timer2.Start() ProgressBar1.Value = 0 Catch ex As Exception End Try Select Case e.newState Case WMPLib.WMPPlayState.wmppsPlaying '再生中 TextBox3.Text = AxWindowsMediaPlayer2.currentMedia.durationString Timer3.Start() ProgressBar1.Maximum = AxWindowsMediaPlayer2.currentMedia.duration ProgressBar1.Value = 0 Case e.newState = WMPLib.WMPPlayState.wmppsMediaEnded '再生終了 Timer3.Stop() ProgressBar1.Value = 0 Case WMPLib.WMPPlayState.wmppsMediaEnded ' 再生が全て終了した時() AxWindowsMediaPlayer2.Ctlcontrols.stop() Case Else Debug.Print(e.newState.ToString()) End Select End Sub Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged If ListBox2.SelectedItem <> "" Then AxWindowsMediaPlayer2.URL = Open00a(ListBox2.SelectedIndex) TextBox1.Text = System.IO.Path.GetFileName(ListBox2.SelectedItem) AxWindowsMediaPlayer2.Ctlcontrols.play() End If End Sub End Class

###試した結果
前の曲に戻ると2回押さないとメッセージボックスが出ます。
###教えてほしい事
1回押すだけで前の曲に戻って
メッセージボックスが出るようにするにはどうすればいいでしょうか?
教えていただけますでしょうか、お願い申し上げます。
###使ってるバージョン
Visual Studio 2017のVBです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

VB.net

1Imports System.IO 2Imports System 3 4Public Class Music00b 5 6 Private history As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) 7 Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk 8 Dim files = OpenFileDialog1.FileNames 9 Dim conflict = files.Where(AddressOf history.Contains) 10 11 If conflict.Any() Then 12 e.Cancel = True 13 Dim fileNames = conflict.Select(AddressOf System.IO.Path.GetFileName) 14 MessageBox.Show("同じファイルがあります。" & vbCrLf & String.Join(vbCrLf, fileNames), "競合", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 15 Else 16 Array.ForEach(files, AddressOf history.Add) 17 End If 18 End Sub 19 Private Sub Music00b_Load(sender As Object, e As EventArgs) Handles MyBase.Load 20 AxWindowsMediaPlayer2.Hide() 21 TextBox1.ReadOnly = True 22 TextBox2.ReadOnly = True 23 TextBox3.ReadOnly = True 24 TextBox2.ReadOnly = True 25 'PictureBox1.Enabled = False 26 'PictureBox2.Enabled = False 27 'PictureBox3.Enabled = False 28 'PictureBox4.Enabled = False 29 'PictureBox5.Enabled = False 30 'ListBox2.Hide() 31 'Label1.Hide() 32 33 End Sub 34 35 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 36 ProgressBar1.Value = 0 37 TextBox2.Text = TimeSpan.FromSeconds(AxWindowsMediaPlayer2.Ctlcontrols.currentPosition).ToString("mm\:ss") 38 Me.Timer1.Enabled = False 39 Me.Timer2.Enabled = True 40 End Sub 41 42 Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick 43 Dim length As Integer 44 Dim current As Integer 45 46 47 '! 変更部分 48 length = If(AxWindowsMediaPlayer2.currentMedia.duration.ToString, 0) 49 50 51 'length = If(AxWindowsMediaPlayer2.currentMedia?.duration, 0) 52 53 current = AxWindowsMediaPlayer2.Ctlcontrols.currentPosition 54 55 ProgressBar1.Value = current 56 ProgressBar1.Maximum = length 57 58 If ProgressBar1.Value = 100 Then 59 ProgressBar1.Value = 0 60 End If 61 End Sub 62 63 Private Sub Timer3_Tick(sender As Object, e As EventArgs) Handles Timer3.Tick 64 TextBox2.Text = TimeSpan.FromSeconds(AxWindowsMediaPlayer2.Ctlcontrols.currentPosition).ToString("mm\:ss") 65 End Sub 66 '! 変更部分 67 Dim Open00a() As String 68 'Dim Open00a As String() 69 Dim file As String() 70 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 71 AxWindowsMediaPlayer2.settings.autoStart = False 72 OpenFileDialog1.FileName = "" 73 OpenFileDialog1.Multiselect = True 74 OpenFileDialog1.Title = "開くファイルを指定" 75 OpenFileDialog1.Filter = "MP3(*.mp3)|*.mp3|全てのファイル (*.*)|*.*" 76 OpenFileDialog1.FilterIndex = 1 77 OpenFileDialog1.RestoreDirectory = True 78 If OpenFileDialog1.ShowDialog() = DialogResult.OK Then 79 file = OpenFileDialog1.SafeFileNames 80 81 '! 変更部分 82 Dim s As Integer 83 If Not Open00a Is Nothing Then 84 s = Open00a.Length 85 ReDim Open00a(s) 86 Open00a(s) = OpenFileDialog1.FileName 87 Else 88 Open00a = OpenFileDialog1.FileNames 89 90 End If 91 For b As Integer = 0 To file.Length - 1 92 ListBox2.Items.Add(file(b)) 93 94 AxWindowsMediaPlayer2.currentPlaylist.appendItem(AxWindowsMediaPlayer2.newMedia(b)) 95 96 Next 97 ListBox2.SelectedIndex = 0 98 TextBox1.Text = System.IO.Path.GetFileName(ListBox2.SelectedItem) 99 End If 100 End Sub 101 102 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 103 '全てクリアされる 104 history.Clear() 105 ListBox2.Items.Clear() 106 TextBox1.Clear() 107 TextBox2.Clear() 108 TextBox3.Clear() 109 Button2.Enabled = True 110 AxWindowsMediaPlayer2.Ctlcontrols.stop() 111 AxWindowsMediaPlayer2.currentPlaylist.clear() 112 Timer1.Stop() 113 Timer2.Stop() 114 Timer3.Stop() 115 ProgressBar1.Value = 0 116 MessageBox.Show("リストクリアーしました。", 117 "報告", 118 MessageBoxButtons.OK, 119 MessageBoxIcon.Asterisk) 120 End Sub 121 122 Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click 123 124 AxWindowsMediaPlayer2.Ctlcontrols.play() 125 126 TextBox1.Text = System.IO.Path.GetFileName(ListBox2.SelectedItem) 127 Timer1.Start() 128 Timer2.Start() 129 Timer1.Enabled = True 130 End Sub 131 132 Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click 133 AxWindowsMediaPlayer2.Ctlcontrols.pause() 134 End Sub 135 136 Private Sub PictureBox3_Click(sender As Object, e As EventArgs) Handles PictureBox3.Click 137 AxWindowsMediaPlayer2.Ctlcontrols.stop() 138 ProgressBar1.Value = 0 139 End Sub 140 141 Private Sub HScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles HScrollBar1.Scroll 142 AxWindowsMediaPlayer2.settings.volume = HScrollBar1.Value 143 144 Lb2.Text = "" & HScrollBar1.Value 145 End Sub 146 Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As System.Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer2.PlayStateChange 147 Try 148 Dim wa As Integer 149 wa = ListBox2.SelectedIndex 150 If AxWindowsMediaPlayer2.currentMedia.isIdentical(AxWindowsMediaPlayer2.currentPlaylist.Item(wa)) Then 151 End If 152 Timer1.Start() 153 Timer2.Start() 154 155 ProgressBar1.Value = 0 156 Catch ex As Exception 157 158 End Try 159 Select Case e.newState 160 Case WMPLib.WMPPlayState.wmppsPlaying '再生中 161 TextBox3.Text = AxWindowsMediaPlayer2.currentMedia.durationString 162 Timer3.Start() 163 ProgressBar1.Maximum = AxWindowsMediaPlayer2.currentMedia.duration 164 ProgressBar1.Value = 0 165 Case e.newState = WMPLib.WMPPlayState.wmppsMediaEnded '再生終了 166 Timer3.Stop() 167 ProgressBar1.Value = 0 168 Case WMPLib.WMPPlayState.wmppsMediaEnded 169 ' 再生が全て終了した時() 170 AxWindowsMediaPlayer2.Ctlcontrols.stop() 171 Case Else 172 Debug.Print(e.newState.ToString()) 173 End Select 174 End Sub 175 Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged 176 If ListBox2.SelectedItem <> "" Then 177 AxWindowsMediaPlayer2.URL = Open00a(ListBox2.SelectedIndex) 178 TextBox1.Text = System.IO.Path.GetFileName(ListBox2.SelectedItem) 179 AxWindowsMediaPlayer2.Ctlcontrols.play() 180 End If 181 End Sub 182 183 '! 変更部分 184 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 185 186 If ListBox2.Items.Count = 0 Or ListBox2.SelectedIndex = -1 Then 187 Exit Sub 188 End If 189 190 If ListBox2.Items.Count >= ListBox2.SelectedIndex + 1 Then 191 ListBox2.SelectedIndex -= 1 192 AxWindowsMediaPlayer2.Ctlcontrols.previous() 193 AxWindowsMediaPlayer2.Ctlcontrols.play() 194 ProgressBar1.Value = 0 195 Timer1.Start() 196 Timer2.Start() 197 198 Else 199 MessageBox.Show("曲がありません", 200 "エラー", 201 MessageBoxButtons.OK, 202 MessageBoxIcon.Asterisk) 203 AxWindowsMediaPlayer2.Ctlcontrols.stop() 204 Timer1.Stop() 205 Timer2.Stop() 206 End If 207 208 End Sub 209End Class 210

コード汚くてごめんなさい

一応これで動くと思います。

投稿2018/04/02 00:57

編集2018/04/03 00:19
syameimaru

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/02 10:23 編集

syameimaruさん ありがとうございます。コードありがとうございました。 開いた曲で「再生しようとしているファイルの拡張子(.)が ファイル形式と一定しません。」 が出てしまいました。 申し訳ございませんがお願い申し上げます
syameimaru

2018/04/03 00:23 編集

バグフィックスできてなくてすみませんでした。 開いた曲で「再生しようとしているファイルの拡張子(.)が ファイル形式と一定しません。」というエラーですが、 色々試した結果、 1、再生しようとしたファイルが、元々.mp3の規格でないものを.mp3にしたファイルだった時(変換ソフトを使用しないで手動で拡張子を変えた場合) 2、中身のない.mp3を再生した時(曲の長さが0秒) 3、.mp3以外のものを取り込んで再生した時(画像データなど) 4、1~3のものを再生しようとしエラーを表示させた後、別のファイルを再生しようとした時 以上の場合にそのエラーが発生する可能性が高いことが分かりました(発生しないこともあったため、確証はありません)。 以下のリンクにて、ファイルの拡張子が正しいものか判断できるようなフリーソフトを紹介していましたので参考にしてください。 [参考サイト](https://oshiete.goo.ne.jp/qa/1827445.html) コードの方を少し修正しましたので、確認よろしくお願いします。
guest

0

詳しい内容ありがとうございました。

投稿2018/04/03 05:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問