- PR -

複数コントロールのループ処理

投稿者投稿内容
achi
会議室デビュー日: 2006/01/08
投稿数: 17
投稿日時: 2006-01-18 15:59
いつもお世話になります。

環境:
Visual Studio.NET 2003
Windows Server2000


ページ(Form)に、コントロールが複数(例えば100個)あるとき
これらを一度に(数行のステップで)無効(.Visible=false)、有効(.Visible=true)
にできないでしょうか。(ループ処理で何とかならないでしょうか)

現状こんな感じなっております。

Me.CheckBox1.Visible = False
Me.CheckBox2.Visible = False
Me.CheckBox3.Visible = False



Me.CheckBox30.Visible = False


何か良い案がありましたらご教授願えますよう
どうぞよろしくお願い致します。


以上
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-01-18 16:18
FindControlを使用して以下のような感じではどうでしょう?

コード:
	Dim wCtrlCheckBox As CheckBox

Dim i As Integer

For i = 1 to 100
wCtrlCheckBox = CType(FindControl("CheckBox" & Trim(i.ToString), CheckBox)
If (Not IsNothing(wCtrlCheckBox)) Then
wCtrlCheckBox.Visible = False
End If
Next



検証していないので動作しなかったらスイマセン・・・


[ メッセージ編集済み 編集者: Katze 編集日時 2006-01-18 16:22 ]
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-01-18 16:19
さかもとと申します。
以前同じような件で調べたことがあります。
正しいかどうかは別として・・・(笑)
私は以下のように利用しています。

グループボックスに含まれるコントロールがテキストボックスだった場合にテキストボックスの中身をリセットするようにしています。これをvisible=falseなどにすればよいかと
思いますが使えますでしょうか?
(汚いソースをそのまま貼り付けますので細かいところは無視してください)

'------------------------------
private gpb As GroupBox
private i As Integer = 0
private cmb As ComboBox
Public Property Setgpb() As GroupBox
Get
Return Me.gpb
End Get
Set(ByVal Value As GroupBox)
Me.gpb = Value
'ここから↓を変えればできるかも
Do While i < gpb.Controls.Count
If gpb.Controls(i).GetType().ToString = "System.Windows.Forms.TextBox"
Then
gpb.Controls(i).ResetText()
End If
i = i + 1
Loop
i = 0
     'ここまで
End Set
End Property
'------------------------------
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-18 16:24
引用:

achiさんの書き込み (2006-01-18 15:59) より:

ページ(Form)に、コントロールが複数(例えば100個)あるとき
これらを一度に(数行のステップで)無効(.Visible=false)、有効(.Visible=true)
にできないでしょうか。(ループ処理で何とかならないでしょうか)


どのような項目が、どのように配置しているかにも因ります。

関連がある項目ならば、コードから動的にコントロールをロードして、
その際に、コレクションなどに参照を保持しておきます。
あとは、そのコレクションを回して値を設定します。
これが最も現実的ですが、生で配置してあるのであれば不可能です。

または、GroupBox などに関連するコントロールを所属させて、
親コンテナの Controls プロパティから For Each で列挙して値を設定します。

それをやるくらいならば、親コンテナ自体に設定した方が早いのですが、
見た目の問題もあるのでしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-18 16:26
引用:

Katzeさんの書き込み (2006-01-18 16:18) より:

FindControlを使用して以下のような感じではどうでしょう?


FindControl?
Web アプリケーションの質問!?
あ、Form (ページ) って書いてありますね... orz

Web アプリケーションで項目 100 ってあり得るんでしょうか...
普通はユーザーコントロールにしますけど...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
び〜る
会議室デビュー日: 2005/11/29
投稿数: 12
投稿日時: 2006-01-18 16:44
C#ですが、こんな感じの関数作ったらどうでしょう?

private void ChangeViewControles(Control control,bool isVisible)
{
foreach(Control childControl in control.Controls)
{
childControl.Visible = isVisible;
if(childControl.HasChildren)
{
ChangeViewControles(childControl,isVisible);
}
}
}

呼ぶときは、
ChangeViewControles(this,true);
VBだとthisじゃなくてMeなのかな?2番目の引数で表示非表示切り替えです。
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-01-18 16:45
引用:

じゃんぬねっとさんの書き込み (2006-01-18 16:24) より:

FindControl?
Web アプリケーションの質問!?
あ、Form (ページ) って書いてありますね... orz




私は何の疑いもなくWeb アプリケーションだと思ってしまいました... orz

確かに考えてみるとWeb でチェックボックス100項目というのはあまりないかもしれませんので
もしかするとWindows Formなのかも・・・

その場合は、先ほどのはスルーしてください


[ メッセージ編集済み 編集者: Katze 編集日時 2006-01-18 16:49 ]
び〜る
会議室デビュー日: 2005/11/29
投稿数: 12
投稿日時: 2006-01-18 16:52
ん?Webアプリケーション?
早まったか・・・w

スキルアップ/キャリアアップ(JOB@IT)