For Eachについて
投稿者 るきお  ()
投稿日時
2008/8/24 04:31:00
If文でiがRadioButtonであるか判定するのが1つの方法です。
For Each i As Control In Me.Controls
If TypeOf i Is RadioButton Then
i.Enabled = False
End If
Next
VB2008ということなので、新しく追加されたOfTypeメソッドを使ってControlsのうちからRadioButtonだけ抜き出すことも簡単にできます。
For Each i In Me.Controls.OfType(Of RadioButton)()
i.Enabled = False
Next
なお、i As XXXXXの部分はVB2008であればAs Objectと自分で指定する必要はありません。指定を省略するとVBが自動的に適切なAs XXXXと解釈して実行してくれまし、可能であればプログラム中で . を打ったタイミングでヒント(入力候補など)も出ます。
As Objectとすると有用なヒントはでません。
1つ目の例は
As Object → OK。有用なヒントなし。
As Control → OK。有用なヒントあり。
As RadioButton → エラー。(フォームにRadioButtonしかなければOK)。
省略 → As Objectと解釈されます。(VB2008)
2つ目の例は
As Object → OK。有用なヒントなし。
As Control → OK。有用なヒントあり。
AS RadioButton → OK。有用なヒントあり。
省略 → As RadioButtonと解釈されます。(VB2008)
以上蛇足でした。
For Each i As Control In Me.Controls
If TypeOf i Is RadioButton Then
i.Enabled = False
End If
Next
VB2008ということなので、新しく追加されたOfTypeメソッドを使ってControlsのうちからRadioButtonだけ抜き出すことも簡単にできます。
For Each i In Me.Controls.OfType(Of RadioButton)()
i.Enabled = False
Next
なお、i As XXXXXの部分はVB2008であればAs Objectと自分で指定する必要はありません。指定を省略するとVBが自動的に適切なAs XXXXと解釈して実行してくれまし、可能であればプログラム中で . を打ったタイミングでヒント(入力候補など)も出ます。
As Objectとすると有用なヒントはでません。
1つ目の例は
As Object → OK。有用なヒントなし。
As Control → OK。有用なヒントあり。
As RadioButton → エラー。(フォームにRadioButtonしかなければOK)。
省略 → As Objectと解釈されます。(VB2008)
2つ目の例は
As Object → OK。有用なヒントなし。
As Control → OK。有用なヒントあり。
AS RadioButton → OK。有用なヒントあり。
省略 → As RadioButtonと解釈されます。(VB2008)
以上蛇足でした。
投稿者 中学校  ()
投稿日時
2008/8/24 07:26:00
>>1
ありがとうございます。
上手くできました。
ありがとうございます。
上手くできました。
投稿者 よねKEN  ()
投稿日時
2008/8/24 23:01:00
うまくいったとのことなので、Formの上に直接、RadioButtonを複数配置されているのでしょうか。
Formの上にPanelやGroupBoxなどを配置し、
その中にRadioButtonを配置しているような場合だとこのやり方ではうまくいかないと思います。
例えば、以下のようなメソッドをFormのメソッドとして定義しておきます。
Public Sub DisableRadioButton(ByVal parent As Control)
For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is RadioButton Then
ctrl.Enabled = False
End If
If ctrl.Controls.Count > 0 Then
DisableRadioButton(ctrl)
End If
Next
End Sub
その上で、以下のように呼び出せば、そのForm上のすべてのRadioButtonが使用不可になります。
DisableRadioButton(Me)
Me.Controlsには、そのフォームの上に直接配置されたオブジェクトだけが格納されていますので、再帰的に処理をしないと処理もれが発生することがあります。
Formの上にPanelやGroupBoxなどを配置し、
その中にRadioButtonを配置しているような場合だとこのやり方ではうまくいかないと思います。
例えば、以下のようなメソッドをFormのメソッドとして定義しておきます。
Public Sub DisableRadioButton(ByVal parent As Control)
For Each ctrl As Control In Me.Controls
If TypeOf ctrl Is RadioButton Then
ctrl.Enabled = False
End If
If ctrl.Controls.Count > 0 Then
DisableRadioButton(ctrl)
End If
Next
End Sub
その上で、以下のように呼び出せば、そのForm上のすべてのRadioButtonが使用不可になります。
DisableRadioButton(Me)
Me.Controlsには、そのフォームの上に直接配置されたオブジェクトだけが格納されていますので、再帰的に処理をしないと処理もれが発生することがあります。
フォーム上のコントロールすべてのEnabledを操作する時は
for each i as object in me.controls
i.enabled = false
next
ですが、コントロールの中でたとえばRadioButton だけの
Eabledを操作する時はどうすればいいのでしょうか。
教えてください。