質問: new Read(); Readtext.read(TextBox);//呼び出したときにコントロールの名前を指定する。 } } ``` ### その他 このRead.csを他のフォームでも同じように使いまわしたいと考えています。 Form1のtextboxをpublicにしてしまえばReadから指定して変更はできると思いますがあまりpublicに頼るのはどうかと思いますし、例えばFrom2から呼び出し、そこのtextbox2に入れることはできない(=Form1に書けばいいし再利用できない)と考えました。 どのようにすればコントロール名を渡せて処理できるのでしょうか。 詳しい方からすれば簡単なのかもしれませんがまだまだ勉強中で調べてもわかりませんでした。 どうぞよろしくお願いいたします。
回答: コントロールのインスタンスを渡せばいいと思いますが。あと、このような使われ方をするのであればReadクラスは静的クラスにしたほうがいいのではないでしょうか。いちいちインスタンス生成してメソッドを呼ぶというのはなくなります。 ``` // 呼び出し側 // Form1のtextBox1の場合 Reader.read(textBox1); // Form2のtextBo2の場合 Reader.read(textBox2); public class Reader { public static void read(TextBox textbox) { BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += bw_DoWork; bw.RunWorkerCompleted += bw_Completed; // バックグラウンド操作の実行 bw.RunWorkerAsync(textbox); } private static void bw_DoWork(object sender, DoWorkEventArgs e) { var textbox = (TextBox)e.Argument; //ファイルを読み込みresultに入れる処理(省略) var result = "hoge"; e.Result = Tuple.Create(textbox, result);//bw_Completedで受け取らせる } private static void bw_Completed(object sender, RunWorkerCompletedEventArgs e)//処理が完了した時 { var tuple = (Tuple)e.Result; var textbox = tuple.Item1; var result = tuple.Item2; //処理が完了した時 textbox.Text = result;//ここで呼び出したときに指定したTextBoxに入れたい。 } } ```