C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 再帰処理で検出されるコントロールの順番


(過去ログ 169 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■97637 / inTopicNo.1)  再帰処理で検出されるコントロールの順番
  
□投稿者/ Zoon (1回)-(2021/06/18(Fri) 14:52:21)

分類:[.NET 全般] 

VB2015に関する質問です。


現在開いているタブページの中から
ボタンを検索して出力するコードを以下のようにして作りました。



  Private Function SearchButton(ByVal Con1 As Control) As Button


        For Each Con2 As Control In Con1.Controls

            If Con2.GetType Is GetType(Button) Then

                Return CType(Con2, Button)

            End If

        Next

        Return Button1

    End Function



SearchButton(TabControl1.SelectedTab)
のようにすれば、タブページ内に含まれるボタンを取得することができます。

一つ問題は複数ボタンがある場合です。

検索されるボタンに優先順位をつけたいと考えているのですが、

        For Each Con2 As Control In Con1.Controls

の検索してかかる順番ってコントロールごとに設定するには
どのようにしたら良いですか?

TabIndexとかControl Nameなどを変えてみたのですが
変化ありませんでした。
これって生成した順番とかなのでしょうか?
後から変えるにはどのようにしたら良いですか?



引用返信 編集キー/
■97638 / inTopicNo.2)  Re[1]: 再帰処理で検出されるコントロールの順番
□投稿者/ 粗品 (17回)-(2021/06/18(Fri) 15:06:32)
No97637 (Zoon さん) に返信
> VB2015に関する質問です。
>
> これって生成した順番とかなのでしょうか?
> 後から変えるにはどのようにしたら良いですか?
>
>

ZOrderの順番にヒットします
引用返信 編集キー/
■97639 / inTopicNo.3)  Re[2]: 再帰処理で検出されるコントロールの順番
□投稿者/ Zoon (2回)-(2021/06/18(Fri) 15:17:16)
ありがとうございます。

ZOrderって、

Button1.BringToFront()

のようにして変更するしかないですか?

プロパティから変更することってできませんか?
また、コントロールが複数ある場合、どのようにして数値で設定できますか?


引用返信 編集キー/
■97640 / inTopicNo.4)  Re[3]: 再帰処理で検出されるコントロールの順番
□投稿者/ Hongliang (1181回)-(2021/06/18(Fri) 16:27:17)
> ZOrderって、
>
> Button1.BringToFront()
>
> のようにして変更するしかないですか?

デザイナで配置する分については、ドキュメントアウトラインウィンドウでD&Dで上下入れ替えることで変更できます。


あとは、
parent.Controls.Insert(child, index)
のようにしても変更できます。

> プロパティから変更することってできませんか?
できません。

> また、コントロールが複数ある場合、どのようにして数値で設定できますか?
上記Insertが比較的近いかなと思います。
引用返信 編集キー/
■97641 / inTopicNo.5)  Re[1]: 再帰処理で検出されるコントロールの順番
□投稿者/ shu (1256回)-(2021/06/18(Fri) 17:58:41)
No97637 (Zoon さん) に返信


取得したいボタンになんらかの特徴を持たせて
その条件に合ったボタンを返還するのがよいのではないでしょうか?
例えばtagを利用してそのボタンのtagにのみ"b"を設定してあるとしたら
以下のように取得が可能です。

Dim b1 = Con1.Controls.OfType(Of Button).FirstOrDefault(Function(b) CStr(b.Tag) = "b")
引用返信 編集キー/
■97643 / inTopicNo.6)  Re[2]: 再帰処理で検出されるコントロールの順番
□投稿者/ 粗品 (18回)-(2021/06/19(Sat) 15:11:05)
No97641 (shu さん) に返信
> ■No97637 (Zoon さん) に返信
>
>
> 取得したいボタンになんらかの特徴を持たせて
> その条件に合ったボタンを返還するのがよいのではないでしょうか?
> 例えばtagを利用してそのボタンのtagにのみ"b"を設定してあるとしたら
> 以下のように取得が可能です。
>
> Dim b1 = Con1.Controls.OfType(Of Button).FirstOrDefault(Function(b) CStr(b.Tag) = "b")

横から失礼
コメ主に自ら気付という意図だとしたらごめんなさい

tagに"b1","b2"...と連番の内容にしておけば
抽出を"b"始まりとかにしておいて
コマンドに続けて .OrderBy(Function(b) CStr(b.Tag))
とすれば意図した順番で取得出来るわけですね
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -