2017-04-24 90 views
0

我目前正在使用一个循环来创建一个新的用户控件在我的Windows窗体上。我希望它在每次将Y增加125的新位置添加此用户控件的单个实例。从点击按钮存储循环值?

我对C#和Visual Studio很新,所以在下面的代码中,每次按下'add'事件时都会复制第一个实例。我只是想知道,如果有人能够从存储第一个实例中的'y'值的最佳方式提供一些帮助,以便第二次传递到循环中吗?或者如果有更好的方法来做到这一点。

在此先感谢!

private void btnAddRow_Click(object sender, EventArgs e) 
     { 
     int y = 175; 
     for (int i = 0; i <= 0; i++) 
     { 
      NewSkillRow nSkill = new NewSkillRow(); 
      nSkill.Location = new Point(75, y += 125); 
      Controls.Add(nSkill); 
      btnAddRow.Click += new EventHandler(btnAddRow_Click); 
     } 
     } 
+1

*“与下面的代码”*我没有看到任何代码! –

+1

我的不好!我今天才刚刚注册,并没有意识到Ctrl + K上有一个添加代码工具! – DeclanB94

+0

有没有必要的循环。而'y'可能是这个班级的一个变数。而不是事件处理程序,所以它会在调用'btnAddRow_Click'之间保持它的值,并且可以在那里增加。另外,在处理程序中重新附加事件处理程序是没有意义的 - 在表单初始化中仅执行一次。 – dlatikay

回答

1

让您y局部变量的类(你也可以使用它的默认初始化):

private int y = 175; 

事件处理程序被调用每次单击按钮。所以从那里删除y的初始化。

private void btnAddRow_Click(object sender, EventArgs e) 
{ 
    var nSkill = new NewSkillRow(); 
    nSkill.Location = new Point(75, y += 125); 
    Controls.Add(nSkill); 
} 

请注意事件处理程序附件已被删除。从处理程序中重新附加事件处理程序会导致每次单击该按钮时的调用数量不断增加。

循环很好,但不是必需的:只需一次迭代,就可以省略它。

使用y += 125也可以,它依赖于指定赋值运算符的返回值是已赋值的值。

+0

非常感谢!并且如此清楚地解释它。我还没有习惯这种C#方式,我会一直在挠头。 – DeclanB94