※C#独学中で、おかしな事を言ってると思います。初心者の方は参考にしないほうがいいです。
複数のオブジェクトごとに同じ動作をさせたいのですが、SubMethodごとにobjが異なり、objを動的に渡す方法が不明なため、MainMethodにまとめられず、各SubMethod内にて、obj名だけが異なる、コードを書き、SubMethodでの重複コードが大量発生しています。
テキストのような値であれば引数で渡せますが、オブジェクトそのものを渡す方法がわかりません。
無理やりテキストでオブジェクトの名前を渡すと、プロパティが反応しなくなるため、どうしたら良いでしょうか?
■環境
C#
Windowsフォーム
.Net FrameWordks 4.7.2
C#
1 private void MainMethod() 2 { 3 obj.Text = "hoge"; //hogeの値はstringで引数で渡せますがobj自体の渡し方が不明 4 obj.property(); //objを無理やりstringで渡したらpropertyが機能しなくなる。 5 } 6 7 private void SubMethod(object sender, EventArgs e) 8 { 9 MainMethod(); //SubMethodは数が多いため、作業はMainMethodに渡したい 10 } 11
お分かりになる方、そもそもの考え方がおかしい場合、サンプルのコードは一切無視しても問題ございませんので、ご指摘や、こういった場合の対処法などご教示お願いします。
コメントくださった皆様、質問内容が固まっていないようで大変申し訳ありませんでした。
1か月以上、何時間も調べてもわからず、まだ理解に乏しい中で、簡潔に質問しようとしたのが間違いでした。
まだ具体的に質問できるか心配ですが、もう少し具体的なコードを書きます。
C#
1 private void checkBox21_CheckedChanged(object sender, EventArgs e) 2 { 3 CheckBox chkBox = (CheckBox)sender; 4 if (chkBox.Checked) 5 { 6 DialogResult dialog = MessageBox.Show("browser1を今すぐ停止しますか?", "ご確認ください", MessageBoxButtons.YesNo); 7 if (dialog == DialogResult.No) 8 { 9 checkBox21.Checked = false; 10 return; 11 } 12 browser1.Dispose(); 13 checkBox21.Text = "起動"; 14 } 15 else 16 { 17 checkBox21.Text = "停止"; 18 StartUpMethod(); 19 } 20 21 } 22
状況としては、まず、ツールの中で複数のブラウザが起動している状態になっています。
そのブラウザをそれぞれ、停止と起動を制御したく、チェックボックスをトグルボタンに変えて、実際に停止と起動は問題なく動作は出来ているのですが、checkBox21_CheckedChangedのようなメソッドすべての中身に停止と起動の処理が書かれており、困っている状態なのでした。
上記の起動と停止の処理に関して、checkBox21やbrowser1といったオブジェクト(インスタンスと伝えた方がよかったのでしょうか。。)を渡す、どのブラウザでも停止と起動をしてくれるメソッドを一つ用意したいというのが目的でした。
それができたら、都度、checkBox21_CheckedChangedやcheckBox22_CheckedChangedのようなメソッドの中からは、checkBox21やbrowser1といった自分のオブジェクト名を処理のメソッドに渡すだけでよくなり、コードが減って、見やすくて管理もしやすいのかなと思っています。
ご迷惑をおかけしてすいません。
お手数ですが、改めてご教示いただけますと幸いです。
よろしくお願いします。
ご迷惑おかけしております。
len_soukoさんにご教示いただき、
checkBox.NameにてMainMethod側でチェックボックスの名前を確認できて、
checkBox.TextにてMainMethod側でチェックボックスのテキストを指定できました!
ブラウザの方は、
WebView2 WebView2objでオブジェクトを引数で渡してあげて
WebView2obj.Dispose()で実際に実行できました。
実は、まだ以下2つの要素も、それぞれ、毎回違うので動的に引数で渡したいと思っている次第です。
・StartUpMethodのメソッド名そのもの
・Properties.SettingsのUse_BRNameの部分
以下が完全なコードです。
C#
1private void MainMethod(CheckBox checkBox, WebView2 WebView2obj, string BRName) 2{ 3 if (checkBox.Checked) 4 { 5 if (Properties.Settings.Default.Use_BRName == "ON") // ←このプロパティ(Use_BRName)名を動的に引数で渡したいです>< 6 { 7 DialogResult dialog = MessageBox.Show("${BRName}を今すぐ停止しますか?", "ブラウザ停止確認", MessageBoxButtons.YesNo); 8 if (dialog == DialogResult.No) 9 { 10 checkBox.Checked = false; 11 return; 12 } 13 Properties.Settings.Default.Use_BRName = "OFF"; // ←このプロパティ(Use_BRName)名を動的に引数で渡したいです>< 14 Properties.Settings.Default.Save(); 15 WebView2obj.Dispose(); // ←ここは動的に引数で渡せました! 16 checkBox.Text = "起動"; 17 } 18 } 19 else 20 { 21 if (Properties.Settings.Default.Use_BRName == "OFF") // ←このプロパティ(Use_BRName)名を動的に引数で渡したいです>< 22 { 23 Properties.Settings.Default.Use_BRName = "ON"; // ←このプロパティ(Use_BRName)名を動的に引数で渡したいです>< 24 Properties.Settings.Default.Save(); 25 checkBox.Text = "停止"; 26 StartUpMethod(); // ←このメソッドの名前を動的に引数で渡したいです>< 27 } 28 } 29}
お手数ですが、ご教示いただけますと幸いです。
よろしくお願いします。
回答4件
あなたの回答
tips
プレビュー