当前位置:  开发笔记 > 编程语言 > 正文

c#更改for循环中控件的名称

如何解决《c#更改for循环中控件的名称》经验,为你挑选了1个好方法。

我正在制作一个程序,它将在for循环中在屏幕上制作按钮.这很重要,因为用户需要访问多个按钮,并且每次运行都可能会发生变化.这是我到目前为止的代码:

public Form1()
    {
        InitializeComponent();
        int top = 5;
        int left = 5;
        for (int i = 0; i < 10; i++)
        {
            Button button = new Button();
            button.Height = 50;
            button.Left = left;
            button.Top = top;
            this.Controls.Add(button);
            left += button.Width + 2;
        }
    }

我想要的基本上是这样的:

Button b+i = new Button();

就像组合两个字符串一样,我希望循环中第一次运行时按钮的名称为b0,然后是b1,然后是b2,依此类推.

我使用Visual Studio,并且InitializeComponent()转到编辑器生成的代码来制作窗口和东西.只有窗户在那里制造.

谢谢您的帮助!



1> Joel Coehoor..:

担心变量名是解决这个问题的错误方法.有几种选择:

使用列表

List

您还可以使用OfType()方法创建:

var buttons = this.Controls.OfType

这些可以与FlowLayoutPanel或TableLayoutPanel结合使用以简化代码:

public Form1()
{
    InitializeComponent();

    for (int i = 0; i < 10; i++)
    {
        Button button = new Button();
        button.Height = 50;
        FlowLayoutPanel1.Controls.Add(button); //panel handles Left/Top location
    }
}

该面板还具有帮助您的应用扩展到不同dpi或屏幕/窗口大小的优势.

其中任何一个也可以适应开始考虑连接到数据源(并减少代码):

var buttons = Enumerable.Range(0, 10).Select(b => new Button {
   Height = 50,
   Left = 5 + ( b * (BUTTONWIDTH + 2) ),
   Top = 5,
   Name = String.Format("Button{0}", b)
});

//buttons.ToList()
//or
//this.Controls.AddRange(buttons.ToArray())
//or 
//FlowLayoutPanel1.Controls.AddRange(buttons.ToArray()) //Remove Left/Top code

但是所有这一切都没有意义,直到你可以让按钮实际做某事.您需要(至少)Click事件的事件处理程序:

foreach (var b in butons)
{
     b.Click += (s,e) => 
    { 
        //click code for all of the buttons goes here
        // you can tell the buttons apart by looking at the "s" variable 

    };
}

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有