teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

説明の加筆

2020/12/12 04:34

投稿

XPChannel
XPChannel

スコア6

title CHANGED
File without changes
body CHANGED
@@ -109,7 +109,7 @@
109
109
  }
110
110
  ```
111
111
  ### 試したこと
112
- PlaySoundChange()のXの部分に、'Console.WriteLine(index);' を記述し、実行しました。結果は次のようになりました。
112
+ リストの項目が3つのときにPlaySoundChange()のXの部分に、'Console.WriteLine(index);' を記述し、実行しました。結果は次のようになりました。
113
113
  0
114
114
  0
115
115
  0

3

画像の説明の部分を他とそろえた

2020/12/12 04:34

投稿

XPChannel
XPChannel

スコア6

title CHANGED
File without changes
body CHANGED
@@ -9,17 +9,17 @@
9
9
 
10
10
 
11
11
  <コンパイルしたファイルを実行したときの状態>
12
- > 'a.wav'がデフォルトで表示されている
12
+ > >>'a.wav'がデフォルトで表示されている
13
13
  ![コンパイルしたファイルを実行したときの状態](950cbc2bdc001e4ef9e6735baf4ff549.jpeg)
14
14
 
15
15
 
16
16
  <'b.wav'をクリックし選択したときの状態>
17
- > 'b.wav'(選択した項目の名前)が正しく表示されている
17
+ > >>'b.wav'(選択した項目の名前)が正しく表示されている
18
18
  !['b.wav'をクリックし選択したときの状態](8dc2e60d63b42ce1a47480bdbee496f4.jpeg)
19
19
 
20
20
 
21
21
  <'再生'ボタンをクリックしたときの状態>
22
- >>'b.wav'を選択していたのに勝手に'c.wav'になりc.wavの音楽ファイルが再生され
22
+ > >>'b.wav'を選択していたのに勝手に'c.wav'になりc.wavの音楽ファイルが再生されてしまう
23
23
  !['再生'ボタンをクリックしたときの状態](792afca5136d4fe56688110841757e46.jpeg)
24
24
 
25
25
  ### ソースコード

2

インデントの挿入、画像ファイルの挿入、加筆

2020/12/12 04:05

投稿

XPChannel
XPChannel

スコア6

title CHANGED
File without changes
body CHANGED
@@ -6,33 +6,50 @@
6
6
  ###発生する問題
7
7
  リストボックスの中身を2つ以上にした時に,どれか1つの項目を選択するとラベルには選択した項目のファイルの名前が表示される。しかし、再生・停止ボタンをクリックすると、ラベルにリストボックスの最後の項目のファイルの名前が表示され、リストボックスの最後の項目の音楽ファイルが再生されてしまう。
8
8
 
9
+
10
+
11
+ <コンパイルしたファイルを実行したときの状態>
12
+ > 'a.wav'がデフォルトで表示されている
13
+ ![コンパイルしたファイルを実行したときの状態](950cbc2bdc001e4ef9e6735baf4ff549.jpeg)
14
+
15
+
16
+ <'b.wav'をクリックし選択したときの状態>
17
+ > 'b.wav'(選択した項目の名前)が正しく表示されている
18
+ !['b.wav'をクリックし選択したときの状態](8dc2e60d63b42ce1a47480bdbee496f4.jpeg)
19
+
20
+
21
+ <'再生'ボタンをクリックしたときの状態>
22
+ >>'b.wav'を選択していたのに勝手に'c.wav'になりc.wavの音楽ファイルが再生される
23
+ !['再生'ボタンをクリックしたときの状態](792afca5136d4fe56688110841757e46.jpeg)
24
+
9
25
  ### ソースコード
10
26
  Formクラスを使用し、以下のようにソースコードを書きました。
11
-
27
+ ```ここに言語を入力
28
+ //コード
12
29
  using System;
13
- using System.Drawing;
14
30
  using System.Windows.Forms;
15
- class part05{
31
+ class part05
16
-
32
+ {
17
33
  [STAThread]
18
- static void Main(){
34
+ static void Main()
35
+ {
19
36
  Application.EnableVisualStyles();
20
- Application.Run(new Player()); }
37
+ Application.Run(new Player());
38
+ }
21
39
 
22
40
  }
23
41
 
24
- class Player : Form{
42
+ class Player : Form
25
-
43
+ {
26
44
  Label label = new Label();
27
45
  ListBox listbox;
28
46
  Button Play;
29
47
  Button Stop;
30
48
  System.Media.SoundPlayer soundplayer;
31
- string[] paths;
49
+ string[] paths;
32
- string[] safepaths;
50
+ string[] safepaths;
33
-
34
- public Player(){
51
+ public Player()
35
-
52
+ {
36
53
  label.Location = new Point(115, 20);
37
54
  label.AutoSize = true;
38
55
  this.FormBorderStyle = FormBorderStyle.FixedSingle;
@@ -40,20 +57,20 @@
40
57
  this.Size = new Size(750, 600);
41
58
  this.Location = new Point(100, 50);
42
59
  soundplayer = new System.Media.SoundPlayer();
43
- paths = new string[]{ /*ここに音楽のパスを記入*/ };
60
+ paths = new string[]{ /*音楽ファイルのパス*/ };
44
61
 
45
62
  listbox = new ListBox(){
46
63
  Location = new Point(375, 10),
47
64
  Size = new Size(300, 500),
48
65
  DrawMode = DrawMode.OwnerDrawFixed, };
49
66
 
50
- safepaths = new string[]{ /*ここにリストに表示する相対パスを記入*/ };
67
+ safepaths = new string[]{ /*音楽ファイルの名前*/ };
51
68
 
52
- listbox.Items.AddRange(safepaths);
69
+ listbox.Items.AddRange(safepaths);
53
- listbox.DrawItem += new DrawItemEventHandler(DrawPlaylist);
70
+ listbox.DrawItem += new DrawItemEventHandler(DrawPlaylist);
54
71
 
55
- this.Controls.Add(listbox);
72
+ this.Controls.Add(listbox);
56
- this.Controls.Add(label);
73
+ this.Controls.Add(label);
57
74
 
58
75
  Play = new Button(){
59
76
  Location = new Point(20, 50),
@@ -67,13 +84,12 @@
67
84
 
68
85
  Stop.Click += new EventHandler(StopClick);
69
86
 
70
- this.Controls.AddRange(new Control[]{
87
+ this.Controls.AddRange(new Control[]{ Play, Stop } );
71
- Play, Stop } );
72
88
  }
73
89
 
74
90
  void DrawPlaylist(object sender, DrawItemEventArgs e){
75
91
 
76
- e.DrawBackground();
92
+ e.DrawBackground();
77
93
  string text = (sender as ListBox).Items[e.Index].ToString();
78
94
  Brush fb = new SolidBrush(e.ForeColor);
79
95
  e.Graphics.DrawString(text, e.Font, fb, e.Bounds);
@@ -81,22 +97,17 @@
81
97
  PlaySoundChange(e.Index, text); }
82
98
 
83
99
  void PlaySoundChange(int index, string text){
84
-
85
100
  soundplayer.Stop();
86
- //X-Console.WriteLine(index);
101
+ //X   Console.WriteLine(index);
87
- label.Text = text;
102
+ label.Text = text;
88
103
  soundplayer.SoundLocation = paths[index];
89
104
  soundplayer.Load(); }
90
105
 
91
- void PlayClick(object sender, EventArgs e){
106
+ void PlayClick(object sender, EventArgs e){ soundplayer.Play(); }
92
- soundplayer.Play(); }
93
107
 
94
- void StopClick(object sender, EventArgs e){
108
+ void StopClick(object sender, EventArgs e){ soundplayer.Stop(); }
109
+ }
95
- soundplayer.Stop(); } }
110
+ ```
96
-
97
-
98
-
99
-
100
111
  ### 試したこと
101
112
  PlaySoundChange()のXの部分に、'Console.WriteLine(index);' を記述し、実行しました。結果は次のようになりました。
102
113
  0

1

誤字の修正

2020/12/12 03:57

投稿

XPChannel
XPChannel

スコア6

title CHANGED
File without changes
body CHANGED
@@ -117,8 +117,7 @@
117
117
  1
118
118
  2 <<再生ボタンをクリックした瞬間にここまで表示された
119
119
 
120
- 自分でもググって調べて見たのですが、初心者の私にはどのサイトがこの現象について書かれているのかが分かりませんでした。自分が分かったのは、再生ボタンをクリックすると最終的にe.Indexの部分が最大の数になるということだけでした。回避方法として2回連続でe.Indexが同じ値だったときだけ
121
- PlaySoundChange()を呼び出すという方法も思いつきましたが、もっと簡単に実装できる方法がないか知りたいです。
120
+ 自分でもググって調べて見たのですが、初心者の私にはどのサイトがこの現象について書かれているのかが分かりませんでした。自分が分かったのは、再生ボタンをクリックすると最終的にe.Indexの部分が最大の数になるということだけでした。回避方法として2回連続でe.Indexが同じ値だったときだけPlaySoundChange()を呼び出すという方法も思いつきましたが、もっと簡単に実装できる方法がないか知りたいです。
122
121
 
123
122
  ### 補足情報
124
123