2016-03-16 137 views
1

所以我想从一个字符串创建一个按钮。我知道如何通过一个字符串来访问一个按钮,如果它已经被创建,但这不是atm的情况。为一个字符串中的按钮创建一个变量

像这样:Button "myButton" = new Button();

当然,这并不工作,但,这是可能的吗?

+0

你可以详细说明“从字符串创建按钮”是什么意思?你是否想以某种方式将一个字符串与一个按钮相关联? –

+0

@ E.Moffat我很抱歉模糊的标题,我想从字符串中创建按钮名称。正如我在我的例子中所展示的那样。 Button“myButton”= new Button(); – Gewoo

+0

*“我知道如何通过字符串访问按钮,如果它已经创建”*您打算如何做到这一点?我想你会发现他们正在通过一个按钮的Name属性进行搜索,并且完全不关心本地变量名是什么。示例[ControlCollection.Find](https://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.find(v = vs.100).aspx)正在搜索“Name”一个控件,它不同于任何本地变量名称 –

回答

2

假设你正在使用ControlCollection.Find由一个字符串来找到你的控件,然后记下该MSDN项:

搜索控制通过他们的名称属性,并建立匹配的所有控件数组。

它不关心什么(如果有的话)的变量名称的按钮被分配到(也不可能知道或以任何有用的方式来使用它),它只关心你的按钮Name财产。所以,你可以做这样的事情:

var IDontCareWhatThisIsCalled = new Button() 
{ 
    Name = "myButton" 
}; 
someForm.Controls.Add(IDontCareWhatThisIsCalled); 

然后:

var thatButton = someForm.Controls.Find("myButton"); 

但是,如果你有一堆按钮,你需要能够通过名称查找,那么最好的选择可能会把它们放在一个Dictionary<string,Button>

Dictionary<string,Button> buttonDictionary = new Dictionary<string,Button>(); 
// .... 
var b = new Button(); 
buttonDictionary["myButton"] = b; 
someForm.Controls.Add(b); 
// ... 
// To retrieve later: 
var thatButton = buttonDictionary["myButton"]; // Note if the key doesn't exist, it will 
               // throw an exception - so check first 
相关问题