2017-04-24 6 views
0

현재 루프를 사용하여 Windows 양식에 새 사용자 정의 컨트롤을 만듭니다. 나는 Y가 매번 125 씩 증가하는 새로운 위치에이 사용자 정의 컨트롤의 단일 인스턴스를 추가하기를 원합니다.클릭 버튼에서 루프 값 저장?

나는 아래의 코드로, 첫 번째 인스턴스마다 복제되고 그래서 내가 '추가'이벤트를 누르면, C# 및 Visual Studio에서 아주 새로운 해요. 나는 누군가가이 첫 번째 인스턴스에서 '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