从string创建控件名称

时间:2011-05-08 20:20:26

标签: c# winforms

可以创建类似的东西:

int[] array = new int[3]{1,2,3};
Button "btn"+array[0] = new Button();

3 个答案:

答案 0 :(得分:4)

您可以轻松创建Button个实例的数组,但在编译时您无法通过名称访问它们;由于名称将在运行时生成,因此您还必须在运行时存储密钥。

您可以做的最接近的事情是填充IDictionary<string, Button>的实现,如下所示:

int[] array = new int[3] { 1, 2, 3 };

IDictionary<string, Button> buttons = 
    array.ToDictionary(i => "btn" + i, i => new Button());

当然,通过密钥(即btn1btn2btn3)访问控件是您必须克服的问题(我假设您将这些存储在某处,并且稍后访问它们。)

根据您的评论,应该注意的是,您所指的名称对于表单或框架并不重要,它们仅对您有意义。如果您不希望使用IDictionary,则不必使用{{1}},这只是您希望以后再进一步处理它们(取决于您的需求)。

答案 1 :(得分:2)

这是不可能的 - 你可以改用字典:

var myButtons = new Dictionary<string,Button>();
myButtons.Add( "btn"+array[0], new Button());

var firstButton = myButtons["btn1"];

答案 2 :(得分:1)

你问的问题不是直接可能的,但我认为你真正想要的是答案:

假设您有自己的数组IEnumerable<int>

Dictionary<int, Buttton> buttons = new Dictionary<int, Button>;
foreach (int key in array)
{
  Button b = new Button();
  b.Text = key.ToString();
  buttons.Add(key, b);
}

现在您可以轻松使用这样的按钮:buttons[1]