2017-04-24 87 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