Mats Petersson 和 Captain Oblivious 的答案都是正确的,你不能这样做。在 C++ 中,无法通过包含变量或对象名称的字符串来访问变量或对象。
但是,如果您所拥有的只是一个包含其名称的字符串,则 WinForms 中有一种方法可以访问表单上的控件。您可以使用由父表单维护的Controls
集合来执行此操作。
您可以使用循环手动迭代此集合for each
,将Name
每个控件的属性值与您的字符串对象进行比较,直到获得匹配项:
for each (Control ^ctl in this->Controls)
{
if (ctl->Name == "trFinger1Ph1")
{
// Found a match!
// ...
}
}
…或者您可以使用该Find
方法让框架为您进行搜索并返回一个包含所有可能匹配项的数组。
var ctrls = this.Controls.Find("trFinger1Ph1", true);
不幸的是,您不能使用您建议的语法来做到这一点。那是:
std::string test = "trFinger1Ph1"
int value = Form1::test -> Value; // won't work!
显然,您需要确保所有控件都具有唯一的名称才能使其正常工作。这是一种设计气味,看起来非常可疑,可能是错误的。我不建议将此作为“清理”代码的一般方法,就像您在问题中建议的那样。