【问题标题】:Create a variable for a button from a string从字符串为按钮创建一个变量
【发布时间】:2016-03-16 19:24:21
【问题描述】:

所以我想从一个字符串创建一个按钮。如果按钮已经创建,我知道如何通过字符串访问按钮,但 atm 并非如此。

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

但这当然行不通,这可能吗?

【问题讨论】:

  • 您能详细说明“从字符串创建按钮”是什么意思吗?您是否试图以某种方式将字符串与按钮相关联?
  • @E.Moffat 很抱歉标题含糊,我想从字符串创建按钮名称。正如我在示例中所展示的。按钮“我的按钮”=新按钮();
  • " 如果按钮已经创建,我知道如何通过字符串访问按钮" 你打算怎么做?我想你会发现他们正在搜索按钮的 Name 属性,根本不关心局部变量名称是什么。示例ControlCollection.Find 正在搜索控件的Name,该控件不同于任何局部变量名称
  • 听起来你想要做的是从字符串中命名一个变量......这与创建按钮无关。
  • 您不能从稍后(编译后)确定的字符串创建代码标识符myButton,例如"myButton"。您可以做的最好的事情是使用像字典这样的关联容器,或者在Button 上设置Name 属性。

标签: c# .net winforms button


【解决方案1】:

假设您使用ControlCollection.Find 通过字符串查找控件,请注意 MSDN 条目:

按其 Name 属性搜索控件并构建一个包含所有匹配控件的数组。

它不关心按钮被分配给什么(如果有的话)变量名(也不知道或以任何有用的方式使用它),它只关心按钮的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

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多