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