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

回答編集履歴

3

Dictionaryについてのコードを追記

2021/06/06 15:10

投稿

len_souko
len_souko

スコア1367

answer CHANGED
@@ -7,6 +7,25 @@
7
7
  僕のエスパー力ではまだまだだったようですな
8
8
  インターフェースの所の説明は今回は関係なさそうですが、現時点でもわからない```StartUpMethod();```が判明した場合は必要となる可能性もあります
9
9
 
10
+ チェックボックスと対になるブラウザコントロールが何かというのは名前からは拾えないと思いますので、デザイナ側でどのチェックボックスとどのブラウザコントロールがついになるのかを確認してください
11
+ プロパティウィンドウで確認できます
12
+ 次に、対となるチェックボックスの名称をキーとしてブラウザコントロールを辞書として登録します
13
+ ※一つ目は質問文のコードから、二つ目以降は単純に番号をインクリメントしているだけなので、実際の名前を当ててください
14
+ また、```Dictionary```や```nameof()```についてもコピペで済まさずにきちんと調べてください
15
+ ```c#
16
+ // formクラスのプライベートフィールドとして定義する
17
+ private Dictionary<string, WebBrowser> CheckBrowserPair = new Dictionary<string, WebBrowser>()
18
+ {
19
+ {nameof(checkBox21), browser1},
20
+ {nameof(checkBox22), browser2},
21
+ {nameof(checkBox23), browser3},
22
+ {nameof(checkBox24), browser4},
23
+ }
24
+ ```
25
+
26
+ 上記のような辞書を登録しておくと```CheckBrowserPair[checkBox.Name]```で対応するブラウザコントロールのインスタンスを取得できます
27
+ ただ、こういうのはユーザーコントロールで内部に隠ぺいするのが感覚的に分かり易いかと思いますので、いったんこのやり方で出来ることを確認できて、かつやってることが何なのかを知らべてなんとなく理解できたのならユーザーコントロールを自作するというのを調べて実装すると良いかと思います
28
+
10
29
  ---
11
30
 
12
31
  まだ、```StartUpMethod();```が何かわからないけれど・・・・

2

質問タイトルに対しての回答を追記

2021/06/06 15:10

投稿

len_souko
len_souko

スコア1367

answer CHANGED
@@ -1,5 +1,12 @@
1
+ そもそもの質問タイトルの「オブジェクトを別のメソッドにオブジェクトとして渡すことは可能ですか?」に対しての回答が忘れていましたので追記します
2
+ 「はい、できます」詳細は回答にある```Browser起動停止切り替え(CheckBox checkBox, WebBrowse browser)```のような形でメソッドを定義し、呼び出す際にも普通に引数として渡せば使えます
3
+ 型が違う場合はクラスの継承やインターフェースの実装に関して理解できるまでは同じ方じゃないと引数に渡せないと思っておいてください
4
+ クラスの継承やインターフェースの理解が進めば違う型でも引数に渡せる場合もあり、その条件は何やという所が理解できてると思います
5
+
1
6
  2021/06/06 12:18に追記された情報を見て・・
2
7
  僕のエスパー力ではまだまだだったようですな
8
+ インターフェースの所の説明は今回は関係なさそうですが、現時点でもわからない```StartUpMethod();```が判明した場合は必要となる可能性もあります
9
+
3
10
  ---
4
11
 
5
12
  まだ、```StartUpMethod();```が何かわからないけれど・・・・

1

質問文の編集に対応

2021/06/06 04:05

投稿

len_souko
len_souko

スコア1367

answer CHANGED
@@ -1,3 +1,44 @@
1
+ 2021/06/06 12:18に追記された情報を見て・・
2
+ 僕のエスパー力ではまだまだだったようですな
3
+ ---
4
+
5
+ まだ、```StartUpMethod();```が何かわからないけれど・・・・
6
+ どのチェックボックスなのかは```chkBox.Name```か何かで判定できます
7
+
8
+ チェックボックスがどれなのかを判定すればどのブラウザコントロールか判定できます
9
+ で、エスパー力が足りなくて見当外れだった回答ソースにある「処理クラスのインスタンスを取得するような名前」のメソッドでブラウザコントロールを受け取ります
10
+ で、チェックボックスとブラウザコントロールを引数に定義したメソッドを用意してやれば```checkBox21.Text = "起動";```といった感じでチェックボックスの決め打ちをしている部分を引数のチェックボックスのインスタンスを指定すれば良いだけかと思います
11
+ この質問の追加ソースのうち、チェックボックスのテキストプロパティの変更部分、イベントハンドラの名前から言って押したチェックボックス自身のテキストを変更してるだけですよね?押したのと違うチェックボックスはいじってませんよね?
12
+
13
+ であれば取得したチェックボックスとブラウザコントロールのインスタンスを以下のメソッドに渡せば```StartUpMethod```の中身以外は解決できそうです
14
+ ```c#
15
+ //コントロールの型名、間違ってたら御免
16
+ private void Browser起動停止切り替え(CheckBox checkBox, WebBrowse browser)
17
+ {
18
+ if (chkBox.Checked)
19
+ {
20
+ // browser.Nameがあるかどうか確認してないけど、無いならDictionaryか何かで確保しておくと良いよ
21
+ DialogResult dialog = MessageBox.Show($"{browser.Name}を今すぐ停止しますか?", "ご確認ください", MessageBoxButtons.YesNo);
22
+ if (dialog == DialogResult.No)
23
+ {
24
+ checkBox.Checked = false;//もう一度イベントが飛んできそうだけど・・・
25
+ return;
26
+ }
27
+ browser.Dispose();
28
+ checkBox.Text = "起動";
29
+ }
30
+ else
31
+ {
32
+ checkBox.Text = "停止";
33
+ StartUpMethod();
34
+ }
35
+ }
36
+
37
+ ```
38
+
39
+ ---
40
+ 以下はエスパー力が足りなかったためやや見当はずれな回答になっています
41
+
1
42
  エスパー質問と判断して超能力を駆使して質問状況を判断して回答を書きます
2
43
  エスパー能力が足りなかった場合は前提条件の把握に失敗してしまいますが僕自身では分からない為明後日の方向の回答となるかもしれませんが、それに関しての苦情がある場合は質問文へ情報を追加/修正して対応してください
3
44