- †raimu†
- ベテラン
- 会議室デビュー日: 2005/08/23
- 投稿数: 61
|
投稿日時: 2005-10-04 12:31
お世話になります。ライムです。
Visibleプロパティで質問なのですが、
コントロールの種類(TextBoxやLabel)で、まとめてVisibleを
変更するようなことは可能なのでしょうか?
Page.Visibleがあるくらいだから、もしかしたら出来るのかな、と…
良ければ知恵をお貸しください。
|
- ぼのぼの
- ぬし
- 会議室デビュー日: 2004/09/16
- 投稿数: 544
|
投稿日時: 2005-10-04 16:45
javascriptならできるんですけどね(^^;
サーバ側のコードでやる方法はわからないです。
コード: |
|
<script language="javascript">
<!--
function setInvisibileAllTextBox()
{
for(i = 0; i < Form1.elements.length; i++) {
elm = Form1.elements[i];
if(elm.type == "text") elm.style.visibility = "hidden";
}
}
//-->
</script>
|
|
- SE卵
- 大ベテラン
- 会議室デビュー日: 2004/10/22
- 投稿数: 135
|
投稿日時: 2005-10-04 17:44
ぼのぼのさんがクライアント側は記載してくださいましたので
私は、サーバー側を。あまり良い書き方ではないかも(汗)。。。
コード: |
|
Dim lctlTest As Control
Dim lintLoop As Integer
Dim ltypType As Type
For Each lctlTest In Me.Controls
If lctlTest.ClientID.Equals("FormのID") Then
For lintLoop = 0 To (lctlTest.Controls.Count - 1)
ltypType = lctlTest.Controls(lintLoop).GetType
Select Case ltypType.Name
Case "TextBox"
Dim txtText As TextBox
txtText = CType(lctlTest.Controls(lintLoop), TextBox)
txtText.Visible = False
End Select
Next
End If
Next
|
ltypType.Nameのところはデバッグしながら中身を見ると、テキストボックス
以外のものも分かる。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-10-04 17:55
こんにちは、じゃんぬ です。
引用: |
|
SE卵さんの書き込み (2005-10-04 17:44) より:
Select Case ltypType.Name
Case "TextBox"
|
これだと「コンパイル解決」出来ませんので、私は TypeOf 〜 Is が好きです。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- 囚人
- ぬし
- 会議室デビュー日: 2005/08/13
- 投稿数: 1019
|
投稿日時: 2005-10-04 17:57
では、私がユーザーコントロールを使われた時の奴を^^;
コード: |
|
HideControls( Page.Controls, typeof( TextBox ) );
private void HideControls( ControlCollection controls, Type type )
{
if( controls.Count == 0 )
{
return;
}
foreach( Control control in controls )
{
if( control is type )
{
control.Visible = false;
}
HideControls( control.Controls );
}
}
|
# 確かめてないんでバグあるかも。
|
- SE卵
- 大ベテラン
- 会議室デビュー日: 2004/10/22
- 投稿数: 135
|
投稿日時: 2005-10-05 09:09
>
引用: |
|
>じゃんぬねっとさんの書き込み
>これだと「コンパイル解決」出来ませんので、私は TypeOf 〜 Is が好きです。
|
確かに。。。固有名詞よりTypeOfでの判断の方が良いと思います。
アドバイスありがとうございます。
コード: |
|
If (TypeOf lctlTest.Controls(lintLoop) Is TextBox) Then
Dim txtText As TextBox
txtText = CType(lctlTest.Controls(lintLoop), TextBox)
txtText.Visible = False
End If
|
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-10-05 09:26
こんにちは、じゃんぬ です。
引用: |
|
SE卵さんの書き込み (2005-10-05 09:09) より:
確かに。。。(^_^;)固有名詞よりTypeOfでの判断の方が良いと思います。
アドバイスありがとうございます。
|
生意気に意見しちゃってすいませんでした。(*_ _)
それと、できる限りブロック スコープを使うべきかなぁ... なんて。
For Each, For ステートメント内だけですもんね。
また、某書籍によるとループ変数は厳密名をつけない方が良いらしいです。
これはブロック変数が存在するおかげで簡素化できるんですけどね。
あと、型も決めうちしてますので DirectCast でも問題ないかなぁって思います。
と思ったのですが、System.Web.UI.Control に Visible は実装されているので、
キャスト自体が必要なさそうですね。
コード: |
|
For Each hControl As Control In Me.Controls
If hControl.ClientID.Equals("Form の ID") Then
For Each innerControl As Control In hControl.Controls
If TypeOf innerControl Is TextBox Then
'/ DirectCast(innerControl, TextBox).Visible = False
innerControl.Visible = False
End If
Next innerControl
End If
Next hControl
|
でも、こんなにネストが深い時点で結構、鬱だったりします。orz
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2005-10-05 14:42
メソッドを分けたり、Queue を使ったり、再帰呼び出し使ったり。。。
そういう拡張をしたコントロールを作ったり。
_____________________________________________________________________________
□ Posted by Jitta on 2005/10/05
□ じったのノート
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006
_________________
|