控制阵列中的位置按钮

时间:2016-12-13 05:56:47

标签: c#

我正在尝试回忆我创建的按钮并将它们放在保持其位置的数组上,但FindControl会给出错误。

 'Form1' does not contain a definition for 'FindControl' and no extension method 
 'FindControl' accepting a first argument of type 'Form1' could be found (are you missing
 a using directive or an assembly reference?)   

我的代码在timer1下。

    private void timer1_Tick(object sender, EventArgs e)
    {
        ...
        if ...
        {
            ...
            Button btn = new Button();
            {
                btn.Name = "Btn-" + tail.ToString();
                btn.Height = 10;
                btn.Width = 10;
                btn.Tag = tail+1;
                btn.Location = new Point((stailX[1]-1)*10, (stailY[1] - 1) * 10);
            }
            this.Controls.Add(btn);
        }
        ...
        for (int i = 1; i <= tail; i++)
        {
            ((Button)this.FindControl("Btn-" + tail.ToString())).Location = new Point((stailX[i] - 1) * 10, (stailY[i] - 1) * 10);
        }

    }

我省略了一些不重要的代码。请帮忙。

3 个答案:

答案 0 :(得分:0)

我认为您可以通过使用this.Controls遍历表单中的每个控件来实现相同目的,并且可以更具体地通过使用.OfType<Button>()过滤它们来实现。要确保使用特定ID动态创建这些控件,您还可以添加条件。此代码如下所示:

int i = 1;
foreach (Button childButton in this.Controls.OfType<Button>())
{
    if (childButton.Name.StartsWith("Btn-"))
    {
        childButton.Location = new Point((stailX[i] - 1) * 10, (stailY[i] - 1) * 10);
    }
    i++;
}

希望它能帮到你

答案 1 :(得分:0)

Controls.Find(“controlname”,true)

怎么样

答案 2 :(得分:0)

我的方法包括将控件放在数组或列表中以便以后轻松访问。这是一个例子:

public partial class Form1 : Form
{
    List<Button> buttonList = new List<Button>();
    int i = 0;

    public Form1()
    {
        InitializeComponent();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        i++;
        Button btn = new Button();
        btn.Location = new Point(20 , i* 30);
        buttonList.Add(btn); // add instance to list

        this.Controls.Add(btn); // add the same instance to the form


        for (int j = 0; j < buttonList.Count; ++j)
        {
            //  do whatever you want here
            buttonList[j].Text = j.ToString();
        }

    }


}

这样您就不需要在每次迭代中找到所需的控件。