DOBON.NET DOBON.NETプログラミング掲示板過去ログ

オプションボタンのコントロール配列を動的に指定したい。

環境/言語:[XP SP3、VS2005のVB.net]
分類:[.NET]

VB6から.netに移行しています。
コンバートで出来た、RaddioButtomArrayを
me.control("ボタン" & i & "(1)").checkedの用に変数iを使って、チェックされているか判断したいのですが。
なにかいい方法はないでしょうか?
どなたかご教示下さい。よろしくおねがいします。
■No30435に返信(Techさんの記事)
> VB6から.netに移行しています。 
VB6 互換ライブラリに頼りすぎない方が良いですよ。
.NET には .NET の作り方というものがありますので。


> me.control("ボタン" & i & "(1)").checkedの用に
control → Controls 、用→様 ですね。


> 変数iを使って、チェックされているか判断したいのですが。 
これでどうでしょう。
RadioButtonArray はコントロールではないので、Me.Controls の代わりに
CallByName 経由でアクセスしてみました。

'--------------------

Option Explicit

Private Sub Command1_Click()
    Dim i As Integer
    i = 1
    If Me.Controls("Option" & CStr(i))(1).Value Then
        MsgBox "Option1(1) がチェックされています。"
    Else
        MsgBox "未チェック"
    End If
End Sub

'--------------------
Option Strict On
Imports Microsoft.VisualBasic.Compatibility.VB6

Friend Class Form1
    Inherits System.Windows.Forms.Form

    Private Sub Command1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Command1.Click
        Dim i As Short = 1
        Dim rdo As RadioButtonArray = DirectCast(CallByName(Me, "Option" & CStr(i), CallType.Get), RadioButtonArray)

        If rdo(1).Checked Then
            MsgBox("Option1(1) がチェックされています。")
        Else
            MsgBox("未チェック")
        End If
    End Sub
End Class

==============================

なお、DirectCast を使っている行は、VB6 でいうところの
 Dim rdo As Object    'VB6 のコントロール配列には、固有の型が無い
 Set rdo = CallByName(Me, "Option1", VbGet)
 If rdo(1).Value Then
のコードに相当します。
■No30440に返信(魔界の仮面弁士さんの記事)
> ■No30435に返信(Techさんの記事)
>>VB6から.netに移行しています。
> VB6 互換ライブラリに頼りすぎない方が良いですよ。
> .NET には .NET の作り方というものがありますので。
>
>
>>me.control("ボタン" & i & "(1)").checkedの用に
> control → Controls 、用→様 ですね。
>
>
>>変数iを使って、チェックされているか判断したいのですが。
> これでどうでしょう。
> RadioButtonArray はコントロールではないので、Me.Controls の代わりに
> CallByName 経由でアクセスしてみました。
>
> '--------------------
>
> Option Explicit
>
> Private Sub Command1_Click()
> Dim i As Integer
> i = 1
> If Me.Controls("Option" & CStr(i))(1).Value Then
> MsgBox "Option1(1) がチェックされています。"
> Else
> MsgBox "未チェック"
> End If
> End Sub
>
> '--------------------
> Option Strict On
> Imports Microsoft.VisualBasic.Compatibility.VB6
>
> Friend Class Form1
> Inherits System.Windows.Forms.Form
>
> Private Sub Command1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Command1.Click
> Dim i As Short = 1
> Dim rdo As RadioButtonArray = DirectCast(CallByName(Me, "Option" & CStr(i), CallType.Get), RadioButtonArray)
>
> If rdo(1).Checked Then
> MsgBox("Option1(1) がチェックされています。")
> Else
> MsgBox("未チェック")
> End If
> End Sub
> End Class
>
> ==============================
>
> なお、DirectCast を使っている行は、VB6 でいうところの
>  Dim rdo As Object 'VB6 のコントロール配列には、固有の型が無い
>  Set rdo = CallByName(Me, "Option1", VbGet)
>  If rdo(1).Value Then
> のコードに相当します。

間違えて消してしまいました。
無事、希望通りの動作になりました。
このたびは、ありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板