Visual Basic 中学校 掲示板
投稿内容
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
>
投稿一覧
>
孫コントロールも含めてのグループ分けについて
タグの編集...
投稿者
青の水
 (学生)   投稿日時
2022/5/17 16:59:14
現在、フォーム上にボタンを複数配置しており、グループボックス内にもボタンを配置しています。
ボタンを押すとNameプロパティを""(空文字)にしたいと考えています。
Nameプロパティを変更したいボタンのTagプロパティに"Top"と設定しているので以下のように書いたのですが、グループボックス内のボタンに適応されず困っています。
2行目のMeの部分をGroupBox1等に変更すれば、解決はするのですが、一つのループで対応することはできないのでしょうか?
ご回答のほどよろしくお願いいたします。
Dim o As Control
For Each o In Me.Controls
If o.Tag = "Top" Then
テキストを””にする処理
'End If
Next
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2022/5/17 17:39:52
> ボタンを押すとNameプロパティを""(空文字)にしたいと考えています。
それは何故ですか?
Text や Tag なら分かりますが、Name を動的に変更するメリットが思い当たらないので、
参考までに理由を教えていただきたいです。
これがデザイン時ではなく、実行時にコントロールを配置するような場合であれば、
Name を空にしたり、複数のコントロールに同じ Name を与えることもありますけれどね…。
とはいえその場合も、コントロールを配置する際に Name を決定するのが普通であり、
配置済みのコントロール名を変更する理由にはならないと思うので。
> グループボックス内のボタンに適応されず困っています。
In Me.Controls ではなく、In GroupBox1.Controls にしたくないのであれば、
再帰的に処理すれば良いと思いますよ。
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2022/5/17 17:47:48
> 再帰的に処理すれば良いと思いますよ。
例えばこんな感じ。
Public
Module
ControlExtensions
<System.Runtime.CompilerServices.Extension>
Public
Function
GetDescendants(source
As
Control)
As
IEnumerable(
Of
Control)
Dim
children = source.Controls.Cast(
Of
Control)()
Return
children.Concat(children.SelectMany(
AddressOf
GetDescendants))
End
Function
End
Module
上記の Module を用意しておけば、
For Each o As Control In Me.GetDescendants()
のようにして、子孫コントロールまで再帰的に列挙できます。
投稿者
青の水
 (学生)   投稿日時
2022/5/17 17:51:39
ご回答ありがとうございます。
理由はそういう課題だからというわけですが、ラベルのテキストを変更すると考えていただいてもかまいません。
再帰的にというのが初耳のため調べてみたいと思います!
投稿者
青の水
 (学生)   投稿日時
2022/5/19 11:11:12
解決いたしました。