tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルタイプによって別ける必要があるのでしょうか?
記事No6368
投稿日: 2007/09/28(Fri) 16:53
投稿者びぎ
 いつも大変お世話になっています。

下記はパネル内の全ての  TextBox 、MaskedTextBox 、RadioButton に
プロパティを設定するプロシージャです。

(設定する内容はTextBox 、MaskedTextBox はReadOnly プロパティ
                RadioButton はAutoCheck プロパティです)

Private Sub sLookControl(ByVal pControl As Control, ByVal pReadFlg As Boolean)
        Dim TextBox As TextBox
        Dim MaskedTextBox As MaskedTextBox
        Dim RadioButton As RadioButton
        '*****
        For Each cldControl As Control In pControl.Controls
            If pControl.HasChildren = True Then
                sLookControl(cldControl, pReadFlg)
            End If
            '
            Select Case True
                Case TypeOf cldControl Is TextBox
                    TextBox = DirectCast(cldControl, TextBox)
                    TextBox.ReadOnly = pReadFlg

                Case TypeOf cldControl Is MaskedTextBox
                    MaskedTextBox = DirectCast(cldControl, MaskedTextBox)
                    MaskedTextBox.ReadOnly = pReadFlg
                  
                Case TypeOf cldControl Is RadioButton
                    RadioButton = DirectCast(cldControl, RadioButton)
                    RadioButton.AutoCheck = pReadFlg                  
             End Select
        Next
    End Sub

TextBox とMaskedTextBoxは設定するプロパティは同じなのですが
Case TypeOf cldControl Is TextBoxと
Case TypeOf cldControl Is MaskedTextBoxは

別々に書かないと駄目なのでしょうか?
できれば1つで書きたいのです。乱文にてすいません。

どなたかわかる方ご指導お願いします。

[ツリー表示へ]
タイトルRe: タイプによって別ける必要があるのでしょうか?
記事No6369
投稿日: 2007/09/28(Fri) 18:48
投稿者魔界の仮面弁士
> TextBox とMaskedTextBoxは設定するプロパティは同じなのですが
>  Case TypeOf cldControl Is TextBoxと
>  Case TypeOf cldControl Is MaskedTextBoxは
> 別々に書かないと駄目なのでしょうか?

MaskedTextBox は、TextBoxBase クラスを継承していますよね。
そしてTextBox も、TextBoxBase クラスを継承していますよね。

という事は……。

[ツリー表示へ]
タイトルRe^2: タイプによって別ける必要があるのでしょうか?
記事No6371
投稿日: 2007/09/28(Fri) 19:17
投稿者びぎ
 難しいですね。

Case TypeOf cldControl Is TextBoxだけでよい
ということでしょうか・・

[ツリー表示へ]
タイトルRe^3: タイプによって別ける必要があるのでしょうか?
記事No6372
投稿日: 2007/09/28(Fri) 19:23
投稿者びぎ
すいません、

Case TypeOf cldControl Is TextBox
    TextBox = DirectCast(cldControl, TextBox)
    TextBox.ReadOnly = pReadFlg

Case TypeOf cldControl Is MaskedTextBox
     MaskedTextBox = DirectCast(cldControl, MaskedTextBox)
     MaskedTextBox.ReadOnly = pReadFlg

と書いていますが、Case TypeOf cldControl Is TextBox

Case TypeOf cldControl Is TextBoxBaseですよね。

となると  TextBox = DirectCast(cldControl, MaskedText)
はいらないのですか?

[ツリー表示へ]
タイトルRe^4: タイプによって別ける必要があるのでしょうか?
記事No6375
投稿日: 2007/09/29(Sat) 19:54
投稿者るしぇ
> となると  TextBox = DirectCast(cldControl, MaskedText)
> はいらないのですか?
Option Strict On にしてみれば、暗黙の型変換になる部分が
エラーとして判定されます。

継承元でもちゃんと評価されるのねぇ。。。ってテスト出力してみて
はじめて知ったww
MaskedTextBox で試したら?
[VB.NET2003]
        Dim objTextBase As TextBoxBase
        Dim cldControl As Control
        'TextBox
        cldControl = Me.TextBox1
        Debug.WriteLine(TypeOf cldControl Is TextBox)
        Debug.WriteLine(TypeOf cldControl Is TextBoxBase)
        objTextBase = DirectCast(cldControl, TextBoxBase)
        Debug.WriteLine(objTextBase.Name)
        'Button
        cldControl = Me.Button1
        Debug.WriteLine(TypeOf cldControl Is TextBox)
        Debug.WriteLine(TypeOf cldControl Is TextBoxBase)
        'objTextBase = DirectCast(cldControl, TextBoxBase)
        'Debug.WriteLine(objTextBase.Name)

[ツリー表示へ]
タイトルRe^5: タイプによって別ける必要があるのでしょうか?
記事No6378
投稿日: 2007/09/30(Sun) 09:02
投稿者びぎ
おはようございます。

早速試してみました。
  
        Dim Textbox As TextBoxBase
       Select Case True
                Case TypeOf cldControl Is TextBoxBase
                    Textbox = DirectCast(cldControl, TextBoxBase)
                    Textbox.ReadOnly = pReadFlg
                Case TypeOf cldControl Is RadioButton
                    RadioButton = DirectCast(cldControl, RadioButton)
                    RadioButton.AutoCheck = pReadFlg
        End Select

でokでした。

もしチェックボックスがあった場合
この場合もAutoCheckでラジオボタンとおなじなのですが

この場合は分けるのですよね。

[ツリー表示へ]