tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB2005で「フォーム上のすべてのコントロールへのアクセス」
記事No7265
投稿日: 2008/04/01(Tue) 13:20
投稿者ゆうや
こんにちは。わからないことがあるので投稿してみました。

WinXPでVB2005を使い始めました。

VB6のサンプルにある「フォーム上のすべてのコントロールへのアクセス」を流用して
VB2005でもやってみました。ちょっとそのプログラムを載せます。

        Dim i As Integer
        Dim Mytype As String

        For i = 0 To Controls.Count - 1
            Mytype = TypeName(Controls(i))
            If TypeName(Controls(i)) = "Button" Then
                Controls(i).Enabled = False
            End If
        Next i

これをやると、Form上のボタンは、EnableプロパティがFlaseになります。
しかし、Form上にあるTabControlの各ページに置いたボタンは、EnableプロパティがFlaseになりませんでした(ボタンが押せます)。。。

TabControlの中にあるコントロールには効かないのでしょうか。もしくは上記以外に他の方法があるのでしょうか?

何方かご存知の方、教えてください。よろしくお願いします。

[ツリー表示へ]
タイトルRe: VB2005で「フォーム上のすべてのコントロールへのアクセス」
記事No7267
投稿日: 2008/04/01(Tue) 17:32
投稿者魔界の仮面弁士
すべてのコントロールに対して「再帰」してください。
(Controls を持っているのは、フォームだけではありません)

それぞれのコントロールは、子階層コントロールのための Controls を持っています。

[ツリー表示へ]
タイトルRe^2: VB2005で「フォーム上のすべてのコントロールへのアクセス」
記事No7269
投稿日: 2008/04/01(Tue) 17:57
投稿者魔界の仮面弁士
> すべてのコントロールに対して「再帰」してください。

実装例:


Public Class Form1

    Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CheckBox1.CheckedChanged
        SetButtonEnabled(Me, CheckBox1.Checked)
    End Sub

    Public Shared Sub SetButtonEnabled(ByVal target As Control, ByVal value As Boolean)
        If TypeOf target Is Button Then
            target.Enabled = value
        End If
        For Each c As Control In target.Controls
            SetButtonEnabled(c, value)
        Next
    End Sub

End Class

[ツリー表示へ]
タイトルRe: VB2005で「フォーム上のすべてのコントロールへのアクセス」
記事No7268
投稿日: 2008/04/01(Tue) 17:33
投稿者ゆうき
ゆうきです。

Controls.Countの「Controls」は、Formのプロパティです。
Formはコンテナなので、子Controlを持っています。
それと同様に、TabControlもコンテナなので、子Controlを持っています。
ですから、こうします。

For i = 0 To TabControl.Controls.Count - 1
  Mytype = TypeName(Controls(i))
  If TypeName(Controls(i)) = "Button" Then
    Controls(i).Enabled = False
  End If
Next i

こうすることで、TabControl内のButtonの
EnabledプロパティがFalseになります。

[ツリー表示へ]
タイトルRe^2: VB2005で「フォーム上のすべてのコントロールへのアクセス」
記事No7270
投稿日: 2008/04/01(Tue) 20:22
投稿者ゆうや
ゆうきさん、魔界の仮面弁士さん>
お返事ありがとうございました。
子階層、子Contorolという考えなんですねー!わからなかった・・・。

ゆうきさんが教えてくれたのは、まさに私がやりたかったことです!
魔界の仮面弁士さんが教えてくれたのは、超汎用性がりそうですね・・・。
お二人に提示していただいたサンプル、参考にさせてもらい実際にやってみます!

ありがとうございました!!

[ツリー表示へ]