我正在尝试回忆我创建的按钮并将它们放在保持其位置的数组上,但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);
}
}
我省略了一些不重要的代码。请帮忙。
答案 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();
}
}
}
这样您就不需要在每次迭代中找到所需的控件。