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

回答編集履歴

2

一部修正

2020/03/01 13:02

投稿

dodox86
dodox86

スコア9416

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

1

コード例を追記

2020/03/01 13:02

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -26,4 +26,118 @@
26
26
  とします。
27
27
 
28
28
  違う話になりますが、`Process`クラスは`System.Diagnostics.Process`クラスと言うものが既にあるので、要注意です。
29
- [Process クラス - Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process?view=netframework-4.8)
29
+ [Process クラス - Microsoft Docs](https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process?view=netframework-4.8)
30
+
31
+ ---
32
+ **追記しました:**
33
+
34
+ いくつか他の回答もいただきましたように様々な考え方、対応方法があると思いますが、「コマンドラインオプションからファイル名を指定した場合、最初の画面表示の際に自動でリストボックスに表示する」例を書いてみましたので以下に示します。コマンドラインオプションで指定したものは`Form1`に新設した`string[] Files`プロパティにセットして扱うようにします。
35
+
36
+ ```C#
37
+ // Program.cs
38
+
39
+ using System;
40
+ using System.Windows.Forms;
41
+
42
+ namespace WindowsFormsApp1
43
+ {
44
+ static class Program
45
+ {
46
+ [STAThread]
47
+ static void Main()
48
+ {
49
+ Application.EnableVisualStyles();
50
+ Application.SetCompatibleTextRenderingDefault(false);
51
+
52
+ var form1 = new Form1();
53
+ string[] files = System.Environment.GetCommandLineArgs();
54
+ if (files.Length > 1)
55
+ {
56
+ // コマンドラインオプション指定があれば、args[1]以降を取り込む。
57
+ var list = new System.Collections.Generic.List<string>(files);
58
+ list.RemoveAt(0);
59
+ form1.Files = list.ToArray();
60
+ }
61
+
62
+ Application.Run(form1);
63
+ }
64
+ }
65
+ }
66
+ ```
67
+
68
+ ```C#
69
+ // Form1.cs
70
+ using System.Windows.Forms;
71
+
72
+ namespace WindowsFormsApp1
73
+ {
74
+ public partial class Form1 : Form
75
+ {
76
+ // 処理対象のファイル配列プロパティ
77
+ public string[] Files { get; set; }
78
+
79
+ // 使いまわすので、フィールドにする。
80
+ private Process processObj = null;
81
+
82
+ public Form1()
83
+ {
84
+ InitializeComponent();
85
+ listBox1.AllowDrop = true;
86
+ processObj = new Process();
87
+ }
88
+
89
+ private void Form1_Load(object sender, System.EventArgs e)
90
+ {
91
+ if (Files != null && Files.Length > 0)
92
+ {
93
+ // Filesプロパティにセット済みであれば
94
+ // フォームの初期表示(Load)時に処理をする。
95
+ processObj.Other_Process(this, Files);
96
+ }
97
+ }
98
+
99
+ private void listBox1_DragEnter(object sender, DragEventArgs e)
100
+ {
101
+ if (e.Data.GetDataPresent(DataFormats.FileDrop))
102
+ {
103
+ e.Effect = DragDropEffects.All;
104
+ }
105
+ else
106
+ {
107
+ e.Effect = DragDropEffects.None;
108
+ }
109
+ }
110
+
111
+ private void listBox1_DragDrop(object sender, DragEventArgs e)
112
+ {
113
+ Files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
114
+ processObj.Other_Process(this, Files);
115
+ }
116
+
117
+ public void listbox_display(string[] item)
118
+ {
119
+ listBox1.Items.Clear(); // クリアしても良いかも
120
+ listBox1.Items.AddRange(item);
121
+ }
122
+ }
123
+ }
124
+ ```
125
+
126
+ ```C#
127
+ // Process.cs
128
+
129
+ namespace WindowsFormsApp1
130
+ {
131
+ class Process
132
+ {
133
+ public void Other_Process(Form1 frm1Obj, string[] Path)
134
+ {
135
+ /*~~特定フォルダなどを消す処理の処理~~*/
136
+ frm1Obj.listbox_display(Path);
137
+ }
138
+ }
139
+ }
140
+ ```
141
+
142
+ こんな方法もある、と言う程度に参考にしてみてください。(エラーケースはほとんど考慮していません)
143
+ ※他回答者であるTN8001さんも書かれていますが、質問者さんオリジナルのコードについて、もしC#含めプログラミング歴1ヶ月でそこまでできたのであれば大したものでは、と私も最初に思いました。がんばってください。