文字列から

タグの編集
投稿者 brv  () 投稿日時 2008/9/2 03:22:00
ユーザーが入力した文字列をもとに変数を指定することはできますか? 
イメージ… 
 
Dim 名前 As String 
Dim 年齢 As String 
      (中略) 
 
A=InputBox("何が知りたい?") 
MsgBox(ChooseHensu(A)) 
 
*ChooseHensu関数は文字列で指定した名前の変数の値を取得
投稿者 るしぇ  () 投稿日時 2008/9/2 03:57:00
If A = "名前" Then 
  ChooseHensu = 名前 
End If
投稿者 るきお  () 投稿日時 2008/9/2 05:10:00
ローカル変数ならるしぇさんのやり方しかないです。 
フィールド(クラスレベルの変数)ならリフレクションで取得できます。 
 
こんな感じです。 
 
Public Class Form1 
 
    Dim 名前 As String = "Visual Basic 中学校" 
    Dim 年齢 As String = 9 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        Dim A As String 
 
        A = InputBox("何が知りたい?") 
        MsgBox(ChooseHensu(A)) 
    End Sub 
 
 
    Private Function ChooseHensu(ByVal hensuName As String) As String 
 
        Dim flag As Reflection.BindingFlags 
        flag = Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance 
 
        Dim r = From f In Me.GetType.GetFields(flag) Where f.Name = hensuName 
 
        If r.Count = 0 Then 
            Return Nothing 
        Else 
            Return r(0).GetValue(Me) 
        End If 
 
    End Function 
 
 
End Class 
 
VBのバージョンがわからなかったのでVB2008と仮定しました。VB2005でもできますがLINQの部分はFor Eachなどに書き換える必要があります。
投稿者 よねKEN  () 投稿日時 2008/9/2 18:45:00
名前、年齢といったものを個別の変数ではなく、  
Dictionary(VB2005以降)なり、Hashtable(VB2003以前)なりを使って保存しておくと、文字列を使って必要な情報を引き出せます。  
 
Dim personInfo As New Dictionary(Of String, String)  
personInfo.Add("名前", "VB太郎")  
personInfo.Add("年齢", "16才")  
 
A=InputBox("何が知りたい?")  
MsgBox(personInfo(A))  
 
みたいな感じです。  
#VBのバージョン不明のためコード例はVB2005以降向けで。
投稿者 brv(質問者)  () 投稿日時 2008/9/4 06:29:00
ありがとうございます。参考になりました。 
リフレクションについて勉強したいと思います。