回答編集履歴

6

修正

2020/12/12 04:59

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,4 @@
1
- DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。ボタクリック時呼ぶようにすればよいのはないでしょうか
1
+ DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。そもそも、描画用のイベトでそれ関係ない処理をするべきではありません。ListBoxの選択連動る処理をするとすれば、SelectedIndexChanged イベントすね
2
-
3
- あと、VisualStudioを使用しない理由は良く判りませんが、基本的に使用すべきです。デバッグ効率やフォームデザインからコードに連携するまでの効率が全然違います。
4
2
 
5
3
 
6
4
 
@@ -9,8 +7,6 @@
9
7
 
10
8
 
11
9
  何故そのような挙動になるかというと、DrawItemイベントで実行された DrawItemEventArgs で再生曲のインデックスを指定しているからです。ListBox項目の再描画は上から順に行われるので、一番最後の項目が PlaySoundChange に指定されたインデックスになるでしょう。
12
-
13
- 簡単に実装したいのであれば、普通に PlayClick のタイミングで ListBoxのSelectedIndex を元に再生処理をすればいいだけです。
14
10
 
15
11
 
16
12
 
@@ -39,3 +35,5 @@
39
35
  PlaySoundChange(e.Index, text); }
40
36
 
41
37
  ```
38
+
39
+ あと、VisualStudioを使用しない理由は良く判りませんが、基本的に使用すべきです。デバッグ効率やフォームデザインからコードに連携するまでの効率が全然違います。

5

修正

2020/12/12 04:59

投稿

退会済みユーザー
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  何故そのような挙動になるかというと、DrawItemイベントで実行された DrawItemEventArgs で再生曲のインデックスを指定しているからです。ListBox項目の再描画は上から順に行われるので、一番最後の項目が PlaySoundChange に指定されたインデックスになるでしょう。
12
12
 
13
- 簡単に実装したいのであれば、普通に PlayClick のタイミングで再生処理をすればいいだけです。
13
+ 簡単に実装したいのであれば、普通に PlayClick のタイミングで ListBoxのSelectedIndex を元に再生処理をすればいいだけです。
14
14
 
15
15
 
16
16
 

4

追記

2020/12/12 04:54

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,41 @@
1
1
  DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。ボタンクリック時に呼ぶようにすればよいのではないでしょうか。
2
2
 
3
3
  あと、VisualStudioを使用しない理由は良く判りませんが、基本的に使用すべきです。デバッグ効率やフォームデザインからコードに連携するまでの効率が全然違います。
4
+
5
+
6
+
7
+ > 自分が分かったのは、再生ボタンをクリックすると最終的にe.Indexの部分が最大の数になるということだけでした。回避方法として2回連続でe.Indexが同じ値だったときだけPlaySoundChange()を呼び出すという方法も思いつきましたが、もっと簡単に実装できる方法がないか知りたいです。
8
+
9
+
10
+
11
+ 何故そのような挙動になるかというと、DrawItemイベントで実行された DrawItemEventArgs で再生曲のインデックスを指定しているからです。ListBox項目の再描画は上から順に行われるので、一番最後の項目が PlaySoundChange に指定されたインデックスになるでしょう。
12
+
13
+ 簡単に実装したいのであれば、普通に PlayClick のタイミングで再生処理をすればいいだけです。
14
+
15
+
16
+
17
+ ```C#
18
+
19
+ void DrawPlaylist(object sender, DrawItemEventArgs e){
20
+
21
+
22
+
23
+ e.DrawBackground();
24
+
25
+ string text = (sender as ListBox).Items[e.Index].ToString();
26
+
27
+ Brush fb = new SolidBrush(e.ForeColor);
28
+
29
+ e.Graphics.DrawString(text, e.Font, fb, e.Bounds);
30
+
31
+ e.DrawFocusRectangle();
32
+
33
+
34
+
35
+ //ここの e.Index は描画対象のListBoxの項目のインデックス
36
+
37
+ //(選択している項目ではない)
38
+
39
+ PlaySoundChange(e.Index, text); }
40
+
41
+ ```

3

修正

2020/12/12 04:53

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,3 @@
1
1
  DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。ボタンクリック時に呼ぶようにすればよいのではないでしょうか。
2
2
 
3
- あと、VisualStudioを使用しない理由は良く判りませんが、基本的に使用すべきです。デバッグ効率やフォームデザインからコード連携するまでの効率が全然違います。
3
+ あと、VisualStudioを使用しない理由は良く判りませんが、基本的に使用すべきです。デバッグ効率やフォームデザインからコード連携するまでの効率が全然違います。

2

修正

2020/12/12 04:20

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,3 @@
1
- DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。
1
+ DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。ボタンクリック時に呼ぶようにすればよいのではないでしょうか。
2
2
 
3
- ボタンクリック時呼ぶようにればよいのではなでしょうか
3
+ あと、VisualStudioを使用しない理由は良く判りませんが、基本的使用べきです。デバッグ効率やフォームデザインからコード連携するまの効率が全然違ます

1

修正

2020/12/12 04:20

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,3 @@
1
- DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、
1
+ DrawItemイベントはあくまでListBoxの項目を描画するイベントなので、そこで PlaySoundChange を呼んでいるのに問題があると思われます。
2
2
 
3
- そこで PlaySoundChange をでいるのに問題があると思われます
3
+ ボタンクリック時にぶようにすればよいのはなでしょうか