我的项目使用的是Visual Basic 2010.我有一个纯文本保存文件,格式如下:
num_TEC|1
num_STR|0
num_PER|0
num_MEC|1
num_KNO|1
num_DEX|1
我正在尝试使用第一列作为对象名称加载数据,第二列作为值。我已经取得了一些成功(跳过一些基本的IO行):
prop = FileReader.ReadLine().Split("|")
tempvar = prop(0)
If TypeName(Me.Controls(tempvar)) = "NumericUpDown" Then
Me.Controls(tempvar).Value = prop(1)
我遇到了问题,因为我在面板或组框中有一些对象而我没有进入它们。
有没有办法严格引用带变量的对象?我很乐意将第一列分配到prop(0)并且只是说
if TypeName(object(prop(0))) = "NumericUpDown" then
object(prop(0)).Value = prop(1)
有人可以帮忙吗?
谢谢!
答案 0 :(得分:1)
我建议将您的控件ID添加到某种列表或字典中,该列表或字典包含您定义的所有控件并用作上面的示例。 列表可以是您定义的类控件列表或简单字典
例如: 将其添加为字段。这里的字符串表示控件ID,对象表示
private readonly Dictionary<String,Control> dictControl = new Dictionary<String,Control>();
//添加参与您的流程的所有控件。确保它是唯一的名称 例如:
private void yourMethodAllControl()
{
this.dictControl.Add(yourControl.Name, yourControl);
... add all your control and so on....
}
//在此处设置您的值
private void SetValues()
{
.....// get all lines from files....
foreach(String line in lines)
{
var query = from ctrl in this.dictControl
where ctrl.Key == line.Split(0)
select ctrl;
var singleCtrl = query.First();
singleCtrl.Value = line.Split(1);
}
}
基本上这个想法是通过使用字典使你更容易操作,而不是装箱和拆箱并检查控制孩子;它只是通过使用它的名称和实例将它们放在字典中。