回答編集履歴

4

見直しキャンペーン中

2023/08/15 09:52

投稿

TN8001
TN8001

スコア9337

test CHANGED
@@ -5,8 +5,8 @@
5
5
  `Properties`の中の`Resources.resx`を開いて、wavファイルをドラッグ&ドロップで入れてください。
6
6
  ![Resources.resx](b0eeaabe25b0701df330c120f59f549a.png)
7
7
 
8
- Propertiesがない場合(.NET Coreや.NET 5以降だとデフォルトで作られません)
8
+ `Properties`がない場合(.NET Coreや.NET 5以降だとデフォルトで作られません)
9
- Propertiesフォルダを作って中に「リソース ファイル」`Resources.resx`を新しい項目から追加します。
9
+ `Properties`フォルダを作って中に「リソース ファイル」`Resources.resx`を新しい項目から追加します。
10
10
 
11
11
  ↓のように使用します。
12
12
  ```cs

3

見直しキャンペーン中

2023/08/15 09:50

投稿

TN8001
TN8001

スコア9337

test CHANGED
@@ -3,22 +3,24 @@
3
3
  まず結論から(画像なんかはまた話が違ってきます)
4
4
  ## exeに埋め込みたい場合:
5
5
  `Properties`の中の`Resources.resx`を開いて、wavファイルをドラッグ&ドロップで入れてください。
6
- ```cs
7
- new SoundPlayer(Properties.Resources.PropertiesResources).Play();
8
- ```
9
- のように使用します。
10
6
  ![Resources.resx](b0eeaabe25b0701df330c120f59f549a.png)
11
7
 
12
8
  Propertiesがない場合(.NET Coreや.NET 5以降だとデフォルトで作られません)
13
9
  Propertiesフォルダを作って中に「リソース ファイル」`Resources.resx`を新しい項目から追加します。
14
10
 
11
+ ↓のように使用します。
12
+ ```cs
13
+ new SoundPlayer(Properties.Resources.PropertiesResources).Play();
14
+ ```
15
+
15
16
  ## 相対パスで指定したい場合:
16
17
  wavファイルのプロパティでビルドアクションをなしかコンテンツにして、「出力ディレクトリにコピー」を、「常にコピーする」または「新しい場合にコピーする」としてください。
18
+ ![エクスプローラー](26d33c59a17218a3ed6e24c16b15ac1a.png)
19
+
20
+ (カレントディレクトリを変更しなければ)↓のように使用します。
17
21
  ```cs
18
22
  new SoundPlayer("Resources/None.wav").Play();
19
23
  ```
20
- (カレントディレクトリを変更しなければ)のように使用します。
21
- ![エクスプローラー](26d33c59a17218a3ed6e24c16b15ac1a.png)
22
24
 
23
25
  ---
24
26
 

2

見直しキャンペーン中

2023/07/29 13:42

投稿

TN8001
TN8001

スコア9337

test CHANGED
@@ -1,383 +1,192 @@
1
1
  > ローカルパス(リソース?)から指定する方法がわかりません。
2
2
 
3
-
4
-
5
3
  まず結論から(画像なんかはまた話が違ってきます)
6
-
7
4
  ## exeに埋め込みたい場合:
8
-
9
5
  `Properties`の中の`Resources.resx`を開いて、wavファイルをドラッグ&ドロップで入れてください。
10
-
6
+ ```cs
7
+ new SoundPlayer(Properties.Resources.PropertiesResources).Play();
11
8
  ```
12
-
13
- new SoundPlayer(Properties.Resources.PropertiesResources).Play();
14
-
15
- ```
16
-
17
9
  のように使用します。
18
-
19
10
  ![Resources.resx](b0eeaabe25b0701df330c120f59f549a.png)
20
11
 
21
-
22
-
23
12
  Propertiesがない場合(.NET Coreや.NET 5以降だとデフォルトで作られません)
24
-
25
13
  Propertiesフォルダを作って中に「リソース ファイル」`Resources.resx`を新しい項目から追加します。
26
14
 
27
-
28
-
29
15
  ## 相対パスで指定したい場合:
30
-
31
16
  wavファイルのプロパティでビルドアクションをなしかコンテンツにして、「出力ディレクトリにコピー」を、「常にコピーする」または「新しい場合にコピーする」としてください。
32
-
17
+ ```cs
18
+ new SoundPlayer("Resources/None.wav").Play();
33
19
  ```
34
-
35
- new SoundPlayer("Resources/None.wav").Play();
36
-
37
- ```
38
-
39
20
  (カレントディレクトリを変更しなければ)のように使用します。
40
-
41
21
  ![エクスプローラー](26d33c59a17218a3ed6e24c16b15ac1a.png)
42
-
43
-
44
22
 
45
23
  ---
46
24
 
47
-
48
-
49
25
  わたしもこのあたり結構難しいなと感じていたのでまとめてみました。
50
26
 
51
-
52
-
53
27
  ### ビルドアクション - リソース(Resource)
54
-
55
28
  WPFで新たに入った埋め込み方法。
56
-
57
29
  埋め込みリソースと仕組みは同じだが、xamlから簡単に読めるようになっている。
58
-
59
30
  画像なんかはこれ一択でしょう。
60
31
 
32
+ ### ビルドアクション - コンテンツ(Content)
33
+ 埋め込まれません。
34
+ 「出力ディレクトリにコピー」を、「常にコピーする」または「新しい場合にコピーする」にしないと意味がない。
35
+ カレントディレクトリを変更していなければ、相対パスで読める。
36
+ なし(None)との違いはよくわからない^^;
61
37
 
62
-
63
- ### ビルドアクション - コンテンツContent
38
+ ### ビルドアクション - なしNone)
64
-
65
39
  埋め込まれません。
66
-
67
40
  「出力ディレクトリにコピー」を、「常にコピーする」または「新しい場合にコピーする」にしないと意味がない。
68
-
69
41
  カレントディレクトリを変更していなければ、相対パスで読める。
70
42
 
71
- なし(None)との違いはよくわからない^^;
72
-
73
-
74
-
75
- ### ビルドアクション - なし(None)
76
-
77
- 埋め込まれません。
78
-
79
- 「出力ディレクトリにコピー」を、「常にコピーする」または「新しい場合にコピーする」にしないと意味がない。
80
-
81
- カレントディレクトリを変更していなければ、相対パスで読める。
82
-
83
-
84
-
85
43
  ### ビルドアクション - 埋め込みリソース(Embedded Resource)
86
-
87
44
  昔からある埋め込み方法。
88
-
89
45
  ビルドアクションでわざわざこれを選ぶ理由はない?
90
46
 
91
-
92
-
93
47
  ### Properties.Resources.resx
94
-
95
48
  Windows フォームでリソースといえばこれ。
96
-
97
49
  埋め込みリソースになるが専用のGUIがついていてわかりやすいし、アクセスが簡単になるように自動でコード生成される。
98
-
99
50
  xamlで使うつもりがないのであれば、これでいいのかな?
100
-
101
-
102
51
 
103
52
  ---
104
53
 
105
-
106
-
107
54
  [アプリケーションのリソース ファイル、コンテンツ ファイル、およびデータ ファイル - WPF .NET Framework | Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/desktop/wpf/app-development/wpf-application-resource-content-and-data-files?view=netframeworkdesktop-4.8)
108
-
109
-
110
55
 
111
56
  [One more time about Resource vs. EmbeddedResource – Ivan Krivyakov](https://ikriv.com/blog/?p=1530)
112
57
 
113
58
 
114
-
115
-
116
-
117
- ```xaml
59
+ ```xml
118
-
119
60
  <Window
120
-
121
61
  x:Class="Questions375405.MainWindow"
122
-
123
62
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
124
-
125
63
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
126
-
127
64
  Width="800"
128
-
129
65
  Height="450">
130
-
131
66
  <StackPanel>
132
-
133
67
  <Button Click="ResourceButton_Click" Content="Resource" />
134
-
135
68
  <Button Click="ContentButton_Click" Content="Content" />
136
-
137
69
  <Button Click="NoneButton_Click" Content="None" />
138
-
139
70
  <Button Click="EmbeddedResourceButton_Click" Content="EmbeddedResource" />
140
-
141
71
  <Button Click="PropertiesResourcesButton_Click" Content="PropertiesResources" />
142
-
143
72
  </StackPanel>
144
-
145
73
  </Window>
146
-
147
74
  ```
148
75
 
149
-
150
-
151
- ```C#
76
+ ```cs
152
-
153
77
  using System;
154
-
155
78
  using System.Media;
156
-
157
79
  using System.Reflection;
158
-
159
80
  using System.Windows;
160
81
 
161
-
162
-
163
82
  namespace Questions375405
164
-
165
83
  {
166
-
167
84
  public partial class MainWindow : Window
168
-
169
85
  {
170
-
171
86
  public MainWindow()
172
-
173
87
  {
174
-
175
88
  InitializeComponent();
176
89
 
177
-
178
-
179
90
  //Environment.CurrentDirectory = @"C:\";
180
-
181
91
  }
182
92
 
93
+ // ビルドアクション - リソース(Resource)
94
+ private void ResourceButton_Click(object sender, RoutedEventArgs e)
95
+ {
96
+ var uri = new Uri("Resources/Resource.wav", UriKind.Relative);
97
+ var info = Application.GetResourceStream(uri);
98
+ new SoundPlayer(info.Stream).Play();
99
+ }
183
100
 
184
-
185
- // ビルドアクション - リソースResource)
101
+ // ビルドアクション - コンテンツContent
186
-
187
- private void ResourceButton_Click(object sender, RoutedEventArgs e)
102
+ private void ContentButton_Click(object sender, RoutedEventArgs e)
188
-
189
103
  {
190
-
191
- var uri = new Uri("Resources/Resource.wav", UriKind.Relative);
104
+ var uri = new Uri("Resources/Content.wav", UriKind.Relative);
192
-
193
- var info = Application.GetResourceStream(uri);
105
+ var info = Application.GetContentStream(uri);
194
-
195
106
  new SoundPlayer(info.Stream).Play();
196
107
 
108
+ // カレントディレクトリを変更しないのであればこれでいい
109
+ //new SoundPlayer("Resources/Content.wav").Play();
197
110
  }
198
111
 
199
-
200
-
201
- // ビルドアクション - コンテンツContent
112
+ // ビルドアクション - なしNone)
202
-
203
- private void ContentButton_Click(object sender, RoutedEventArgs e)
113
+ private void NoneButton_Click(object sender, RoutedEventArgs e)
204
-
205
114
  {
206
-
207
- var uri = new Uri("Resources/Content.wav", UriKind.Relative);
115
+ var uri = new Uri("Resources/None.wav", UriKind.Relative);
208
-
209
- var info = Application.GetContentStream(uri);
116
+ var info = Application.GetRemoteStream(uri);
210
-
211
117
  new SoundPlayer(info.Stream).Play();
212
118
 
213
-
214
-
215
119
  // カレントディレクトリを変更しないのであればこれでいい
216
-
217
- //new SoundPlayer("Resources/Content.wav").Play();
120
+ //new SoundPlayer("Resources/None.wav").Play();
218
-
219
121
  }
220
122
 
221
-
222
-
223
- // ビルドアクション - なし(None)
123
+ // ビルドアクション - 埋め込みリソース
224
-
225
- private void NoneButton_Click(object sender, RoutedEventArgs e)
124
+ private void EmbeddedResourceButton_Click(object sender, RoutedEventArgs e)
226
-
227
125
  {
228
-
229
- var uri = new Uri("Resources/None.wav", UriKind.Relative);
230
-
231
- var info = Application.GetRemoteStream(uri);
126
+ var assembly = Assembly.GetExecutingAssembly();
232
-
127
+ var stream = assembly.GetManifestResourceStream("Questions375405.Resources.EmbeddedResource.wav");
233
- new SoundPlayer(info.Stream).Play();
128
+ new SoundPlayer(stream).Play();
234
-
235
-
236
-
237
- // カレントディレクトリを変更しないのであればこれでいい
238
-
239
- //new SoundPlayer("Resources/None.wav").Play();
240
-
241
129
  }
242
130
 
243
-
244
-
245
- // ビルドアクション - 埋め込みリソース
131
+ // Properties.Resources.resx
246
-
247
- private void EmbeddedResourceButton_Click(object sender, RoutedEventArgs e)
132
+ private void PropertiesResourcesButton_Click(object sender, RoutedEventArgs e)
248
-
249
133
  {
250
-
251
- var assembly = Assembly.GetExecutingAssembly();
252
-
253
- var stream = assembly.GetManifestResourceStream("Questions375405.Resources.EmbeddedResource.wav");
254
-
255
- new SoundPlayer(stream).Play();
134
+ new SoundPlayer(Properties.Resources.PropertiesResources).Play();
256
-
257
135
  }
258
-
259
-
260
-
261
- // Properties.Resources.resx
262
-
263
- private void PropertiesResourcesButton_Click(object sender, RoutedEventArgs e)
264
-
265
- {
266
-
267
- new SoundPlayer(Properties.Resources.PropertiesResources).Play();
268
-
269
- }
270
-
271
136
  }
272
-
273
137
  }
274
-
275
138
  ```
276
139
 
277
-
278
-
279
140
  ```xml
280
-
281
141
  <Project Sdk="Microsoft.NET.Sdk">
282
142
 
283
-
284
-
285
143
  <PropertyGroup>
286
-
287
144
  <OutputType>WinExe</OutputType>
288
-
289
145
  <TargetFramework>net6.0-windows</TargetFramework>
290
-
291
146
  <Nullable>enable</Nullable>
292
-
293
147
  <UseWPF>true</UseWPF>
294
-
295
148
  </PropertyGroup>
296
149
 
297
-
150
+ <ItemGroup>
151
+ <None Remove="Resources\Content.wav" />
152
+ <None Remove="Resources\EmbeddedResource.wav" />
153
+ <None Remove="Resources\Resource.wav" />
154
+ </ItemGroup>
298
155
 
299
156
  <ItemGroup>
300
-
301
- <None Remove="Resources\Content.wav" />
157
+ <Content Include="Resources\Content.wav">
302
-
303
- <None Remove="Resources\EmbeddedResource.wav" />
158
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
304
-
305
- <None Remove="Resources\Resource.wav" />
159
+ </Content>
306
-
307
160
  </ItemGroup>
308
161
 
309
-
162
+ <ItemGroup>
163
+ <EmbeddedResource Include="Resources\EmbeddedResource.wav" />
164
+ </ItemGroup>
310
165
 
311
166
  <ItemGroup>
312
-
313
- <Content Include="Resources\Content.wav">
167
+ <Resource Include="Resources\Resource.wav" />
314
-
315
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
316
-
317
- </Content>
318
-
319
168
  </ItemGroup>
320
169
 
321
-
170
+ <ItemGroup>
171
+ <Compile Update="Properties\Resources.Designer.cs">
172
+ <DesignTime>True</DesignTime>
173
+ <AutoGen>True</AutoGen>
174
+ <DependentUpon>Resources.resx</DependentUpon>
175
+ </Compile>
176
+ </ItemGroup>
322
177
 
323
178
  <ItemGroup>
324
-
325
- <EmbeddedResource Include="Resources\EmbeddedResource.wav" />
179
+ <EmbeddedResource Update="Properties\Resources.resx">
326
-
180
+ <Generator>ResXFileCodeGenerator</Generator>
181
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
182
+ </EmbeddedResource>
327
183
  </ItemGroup>
328
184
 
329
-
330
-
331
185
  <ItemGroup>
332
-
333
- <Resource Include="Resources\Resource.wav" />
186
+ <None Update="Resources\None.wav">
334
-
187
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
188
+ </None>
335
189
  </ItemGroup>
336
190
 
337
-
338
-
339
- <ItemGroup>
340
-
341
- <Compile Update="Properties\Resources.Designer.cs">
342
-
343
- <DesignTime>True</DesignTime>
344
-
345
- <AutoGen>True</AutoGen>
346
-
347
- <DependentUpon>Resources.resx</DependentUpon>
348
-
349
- </Compile>
350
-
351
- </ItemGroup>
352
-
353
-
354
-
355
- <ItemGroup>
356
-
357
- <EmbeddedResource Update="Properties\Resources.resx">
358
-
359
- <Generator>ResXFileCodeGenerator</Generator>
360
-
361
- <LastGenOutput>Resources.Designer.cs</LastGenOutput>
362
-
363
- </EmbeddedResource>
364
-
365
- </ItemGroup>
366
-
367
-
368
-
369
- <ItemGroup>
370
-
371
- <None Update="Resources\None.wav">
372
-
373
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
374
-
375
- </None>
376
-
377
- </ItemGroup>
378
-
379
-
380
-
381
191
  </Project>
382
-
383
192
  ```

1

修正

2021/12/24 21:10

投稿

TN8001
TN8001

スコア9337

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  ```
38
38
 
39
- のように使用します。
39
+ (カレントディレクトリを変更しなければ)のように使用します。
40
40
 
41
41
  ![エクスプローラー](26d33c59a17218a3ed6e24c16b15ac1a.png)
42
42
 
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- ### ビルドアクション - 埋め込みリソース
85
+ ### ビルドアクション - 埋め込みリソース(Embedded Resource)
86
86
 
87
87
  昔からある埋め込み方法。
88
88
 
@@ -94,7 +94,7 @@
94
94
 
95
95
  Windows フォームでリソースといえばこれ。
96
96
 
97
- GUIがついていてわかりやすいし、アクセスもしやすい
97
+ 埋め込みリソースになるが専用のGUIがついていてわかりやすいし、アクセスが簡単になるように自動でコード生成される
98
98
 
99
99
  xamlで使うつもりがないのであれば、これでいいのかな?
100
100