文字列から への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 よね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以降向けで。
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以降向けで。
投稿者 るきお  ()
投稿日時
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などに書き換える必要があります。
フィールド(クラスレベルの変数)ならリフレクションで取得できます。
こんな感じです。
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などに書き換える必要があります。
投稿者 るしぇ  ()
投稿日時
2008/9/2 03:57:00
If A = "名前" Then
ChooseHensu = 名前
End If
ChooseHensu = 名前
End If
投稿者 brv  ()
投稿日時
2008/9/2 03:22:00
ユーザーが入力した文字列をもとに変数を指定することはできますか?
イメージ…
Dim 名前 As String
Dim 年齢 As String
(中略)
A=InputBox("何が知りたい?")
MsgBox(ChooseHensu(A))
*ChooseHensu関数は文字列で指定した名前の変数の値を取得
イメージ…
Dim 名前 As String
Dim 年齢 As String
(中略)
A=InputBox("何が知りたい?")
MsgBox(ChooseHensu(A))
*ChooseHensu関数は文字列で指定した名前の変数の値を取得
リフレクションについて勉強したいと思います。