回答編集履歴

2

一部修正

2020/03/01 13:02

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -282,4 +282,4 @@
282
282
 
283
283
  こんな方法もある、と言う程度に参考にしてみてください。(エラーケースはほとんど考慮していません)
284
284
 
285
- ※他回答者であるTN8001さんも書かれていますが、質問者さんオリジナルのコードについて、もしC#含めプログラミング歴1ヶ月でそこまでできたのであれば大したものでは、と私も最初に思いました。がんばってください。
285
+ ※他回答者であるTN8001さんも書かれていますが、質問者さんオリジナルのコードについて、もしC#含めプログラミング歴1ヶ月でそこまでできたのであれば大したものでは、と私も最初に思いました。引き続きがんばってください。

1

コード例を追記

2020/03/01 13:02

投稿

dodox86
dodox86

スコア9183

test CHANGED
@@ -55,3 +55,231 @@
55
55
  違う話になりますが、`Process`クラスは`System.Diagnostics.Process`クラスと言うものが既にあるので、要注意です。
56
56
 
57
57
  [Process クラス - Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process?view=netframework-4.8)
58
+
59
+
60
+
61
+ ---
62
+
63
+ **追記しました:**
64
+
65
+
66
+
67
+ いくつか他の回答もいただきましたように様々な考え方、対応方法があると思いますが、「コマンドラインオプションからファイル名を指定した場合、最初の画面表示の際に自動でリストボックスに表示する」例を書いてみましたので以下に示します。コマンドラインオプションで指定したものは`Form1`に新設した`string[] Files`プロパティにセットして扱うようにします。
68
+
69
+
70
+
71
+ ```C#
72
+
73
+ // Program.cs
74
+
75
+
76
+
77
+ using System;
78
+
79
+ using System.Windows.Forms;
80
+
81
+
82
+
83
+ namespace WindowsFormsApp1
84
+
85
+ {
86
+
87
+ static class Program
88
+
89
+ {
90
+
91
+ [STAThread]
92
+
93
+ static void Main()
94
+
95
+ {
96
+
97
+ Application.EnableVisualStyles();
98
+
99
+ Application.SetCompatibleTextRenderingDefault(false);
100
+
101
+
102
+
103
+ var form1 = new Form1();
104
+
105
+ string[] files = System.Environment.GetCommandLineArgs();
106
+
107
+ if (files.Length > 1)
108
+
109
+ {
110
+
111
+ // コマンドラインオプション指定があれば、args[1]以降を取り込む。
112
+
113
+ var list = new System.Collections.Generic.List<string>(files);
114
+
115
+ list.RemoveAt(0);
116
+
117
+ form1.Files = list.ToArray();
118
+
119
+ }
120
+
121
+
122
+
123
+ Application.Run(form1);
124
+
125
+ }
126
+
127
+ }
128
+
129
+ }
130
+
131
+ ```
132
+
133
+
134
+
135
+ ```C#
136
+
137
+ // Form1.cs
138
+
139
+ using System.Windows.Forms;
140
+
141
+
142
+
143
+ namespace WindowsFormsApp1
144
+
145
+ {
146
+
147
+ public partial class Form1 : Form
148
+
149
+ {
150
+
151
+ // 処理対象のファイル配列プロパティ
152
+
153
+ public string[] Files { get; set; }
154
+
155
+
156
+
157
+ // 使いまわすので、フィールドにする。
158
+
159
+ private Process processObj = null;
160
+
161
+
162
+
163
+ public Form1()
164
+
165
+ {
166
+
167
+ InitializeComponent();
168
+
169
+ listBox1.AllowDrop = true;
170
+
171
+ processObj = new Process();
172
+
173
+ }
174
+
175
+
176
+
177
+ private void Form1_Load(object sender, System.EventArgs e)
178
+
179
+ {
180
+
181
+ if (Files != null && Files.Length > 0)
182
+
183
+ {
184
+
185
+ // Filesプロパティにセット済みであれば
186
+
187
+ // フォームの初期表示(Load)時に処理をする。
188
+
189
+ processObj.Other_Process(this, Files);
190
+
191
+ }
192
+
193
+ }
194
+
195
+
196
+
197
+ private void listBox1_DragEnter(object sender, DragEventArgs e)
198
+
199
+ {
200
+
201
+ if (e.Data.GetDataPresent(DataFormats.FileDrop))
202
+
203
+ {
204
+
205
+ e.Effect = DragDropEffects.All;
206
+
207
+ }
208
+
209
+ else
210
+
211
+ {
212
+
213
+ e.Effect = DragDropEffects.None;
214
+
215
+ }
216
+
217
+ }
218
+
219
+
220
+
221
+ private void listBox1_DragDrop(object sender, DragEventArgs e)
222
+
223
+ {
224
+
225
+ Files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
226
+
227
+ processObj.Other_Process(this, Files);
228
+
229
+ }
230
+
231
+
232
+
233
+ public void listbox_display(string[] item)
234
+
235
+ {
236
+
237
+ listBox1.Items.Clear(); // クリアしても良いかも
238
+
239
+ listBox1.Items.AddRange(item);
240
+
241
+ }
242
+
243
+ }
244
+
245
+ }
246
+
247
+ ```
248
+
249
+
250
+
251
+ ```C#
252
+
253
+ // Process.cs
254
+
255
+
256
+
257
+ namespace WindowsFormsApp1
258
+
259
+ {
260
+
261
+ class Process
262
+
263
+ {
264
+
265
+ public void Other_Process(Form1 frm1Obj, string[] Path)
266
+
267
+ {
268
+
269
+ /*~~特定フォルダなどを消す処理の処理~~*/
270
+
271
+ frm1Obj.listbox_display(Path);
272
+
273
+ }
274
+
275
+ }
276
+
277
+ }
278
+
279
+ ```
280
+
281
+
282
+
283
+ こんな方法もある、と言う程度に参考にしてみてください。(エラーケースはほとんど考慮していません)
284
+
285
+ ※他回答者であるTN8001さんも書かれていますが、質問者さんオリジナルのコードについて、もしC#含めプログラミング歴1ヶ月でそこまでできたのであれば大したものでは、と私も最初に思いました。がんばってください。