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

回答編集履歴

4

追記

2019/02/07 06:31

投稿

YAmaGNZ
YAmaGNZ

スコア10678

answer CHANGED
@@ -12,8 +12,13 @@
12
12
  ```
13
13
 
14
14
  ### 追記
15
- クラス側にFormA.ButtonAと書くとグループ内部のボタンが複数フォームにまたがる場合に
15
+ クラス側に`FormA.ButtonA`と書くとグループ内部のボタンが複数フォームにまたがる場合に
16
16
  意図しないタイミングでフォームのインスタンスが生成される可能性があるかと思います。
17
+
18
+ また、実際に開いたインスタンスがクラス内で定義したインスタンスと別の可能性もあるので、
19
+ クラス側での`FormA.ButtonA`はバグを埋め込みやすくしているだけだと思います。
20
+
21
+
17
22
  私なら、下記のように書くと思います。
18
23
  ```VB.NET
19
24
  Public Class ButtonGroupClass

3

修正

2019/02/07 06:31

投稿

YAmaGNZ
YAmaGNZ

スコア10678

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  ```
13
13
 
14
14
  ### 追記
15
- 個人的にクラス側にFormA.ButtonAと書くとグループ内部のボタンが複数フォームにまたがる場合に
15
+ クラス側にFormA.ButtonAと書くとグループ内部のボタンが複数フォームにまたがる場合に
16
16
  意図しないタイミングでフォームのインスタンスが生成される可能性があるかと思います。
17
17
  私なら、下記のように書くと思います。
18
18
  ```VB.NET

2

修正

2019/02/07 03:13

投稿

YAmaGNZ
YAmaGNZ

スコア10678

answer CHANGED
@@ -12,7 +12,8 @@
12
12
  ```
13
13
 
14
14
  ### 追記
15
- 個人的にクラス側にFormA.ButtonAと書くのに抵抗ので
15
+ 個人的にクラス側にFormA.ButtonAと書くとグループ内部ボタンが複数フォームまたがる場合に
16
+ 意図しないタイミングでフォームのインスタンスが生成される可能性があるかと思います。
16
17
  私なら、下記のように書くと思います。
17
18
  ```VB.NET
18
19
  Public Class ButtonGroupClass

1

追記

2019/02/07 03:11

投稿

YAmaGNZ
YAmaGNZ

スコア10678

answer CHANGED
@@ -9,4 +9,61 @@
9
9
  For Each b As Button In Buttons
10
10
  b.BackColor = Color.FromArgb(100, 100, 255)
11
11
  Next
12
+ ```
13
+
14
+ ### 追記
15
+ 個人的にクラス側にFormA.ButtonAと書くのに抵抗があるので
16
+ 私なら、下記のように書くと思います。
17
+ ```VB.NET
18
+ Public Class ButtonGroupClass
19
+ Private _Buttons As New List(Of Button)
20
+
21
+ Public Sub AddButton(value As Button)
22
+ _Buttons.Add(value)
23
+ End Sub
24
+ Public Sub SetBackColor(c As Color)
25
+
26
+ For Each b As Button In _Buttons
27
+ b.BackColor = c
28
+ Next
29
+
30
+ End Sub
31
+
32
+ End Class
33
+ ```
34
+ Module
35
+ ```VB.NET
36
+ Public ButtonGroup As ButtonGroupClass() = {New ButtonGroupClass, New ButtonGroupClass, New ButtonGroupClass}
37
+ ```
38
+
39
+ Form1
40
+ ```VB.NET
41
+ Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
42
+
43
+ ButtonGroup(0).AddButton(Button1)
44
+ ButtonGroup(0).AddButton(Button2)
45
+ ButtonGroup(1).AddButton(Button3)
46
+ ButtonGroup(1).AddButton(Button4)
47
+ ButtonGroup(2).AddButton(Button5)
48
+ ButtonGroup(2).AddButton(Button6)
49
+
50
+ End Sub
51
+
52
+ Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
53
+ ButtonGroup(0).SetBackColor(Color.Red)
54
+ End Sub
55
+ ```
56
+ Form2
57
+ ```VB.NET
58
+ Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
59
+
60
+ ButtonGroup(0).AddButton(ButtonA)
61
+ ButtonGroup(0).AddButton(ButtonB)
62
+ ButtonGroup(1).AddButton(ButtonC)
63
+ ButtonGroup(1).AddButton(ButtonD)
64
+ ButtonGroup(2).AddButton(ButtonE)
65
+ ButtonGroup(2).AddButton(ButtonF)
66
+
67
+ End Sub
68
+
12
69
  ```