2016-11-22 2 views
0

그래서 모든 기계를 무작위로 채우는 임의의 버튼이있는 드럼 머신이 있습니다. 나는 2 개의 드럼을 동시에 연주하지 않기를 바랍니다. 총 15 개의 드럼이있는 16 개의 박자가 있습니다. 그래서 for 루프를 사용하여 목록의 현재 값을 검사 한 다음 값 플러스 또는 마이너스 16에 대해 checkbox 부울을 false로 설정합니다.체크 박스 선택을 생략합니다

예 : 확인란 1을 선택하면 확인란 17, 33 , 49 및 65는 비어 있어야합니다. 마찬가지로 체크 박스 56이 선택되면 8, 24, 40 및 72는 선택하지 않아야합니다. 모든 체크 박스에 동일하게 적용됩니다. 어떻게해야할지 모르겠습니다.

다음 This is my form it will help display my intent

무작위로 체크 박스를 채우는 코드입니다 : 찾고에 대한

private void randombuttonClick(object sender, EventArgs e) 
     { 
      List<CheckBox> Checkboxlist = new List<CheckBox>(); 
      foreach (CheckBox control in this.Controls.OfType<CheckBox>()) 
      { 
       Checkboxlist.Add(control); 
       control.Checked = false; 
      } 

      for (int i = 0; i <= 50; i++) 
      { 
       var r = random.Next(0, Checkboxlist.Count); 
       var checkbox = Checkboxlist[r]; 
       Checkboxlist[r].Checked = true; 
      } 
     } 

감사합니다!

+0

당신이 조금 더 구체적이어야한다고 생각합니다. 왜 그런지 알지 못합니다. 왜이 프로젝트에 참여하고 있습니까? 당신은이 프로젝트에서 일하고 있습니다. '티. – Jim

+0

체크 박스 1을 선택하면 17, 33, 49 및 56의 선택을 취소하고 싶습니다. 18, 19, 20 등의 경우와 34, 35 등의 경우는 어떻게됩니까? – Aruna

+0

아마도 라디오 버튼을 사용해야하는 것 같습니다. –

답변

0

우선 무엇보다도 확인란의 목록을 주문하고 싶을 것입니다. 당신이 당신의 tabIndex 속성이 올바르게 설정되어있는 경우, 당신은 할 수 있습니다 :

foreach (CheckBox control in this.Controls.OfType<CheckBox>().OrderBy(x => x.TabIndex)) 
{ 
    //... 
} 

둘째, 가장 간단한 해결책은 재생 임의의 드럼을 따기, 열을 반복하는 아마.

List<CheckBox> checkboxList = this.Controls.OfType<CheckBox>() 
    .OrderBy(x => x.TabIndex) 
    .ToList(); //it's simpler than a foreach loop 
for (int i = 0; i < 16; i++) 
{ 
    var instrumentIndex = random.Next(0, 4); //make it (0, 5) if you want to allow an entirely empty column 
    for (int j = 0; j < 4; j++) 
    { 
     checkboxList[j*16 + i] = (j == instrumentIndex); 
    } 
} 

코드는 현재의 열 번호를 저장하는 변수를 사용 i 열 위에 루프. 각 열에 대해 4 개의 임의의 행을 선택합니다 ("현재 박자에 악기 없음"을 옵션으로 지정하려면 행간과 일치하지 않는 4를 포함하도록 무작위 범위를 확장하십시오.).

그리고, 해당 열의 각 체크 박스 (첫 번째 행과 i 번째 열에있는 i 번째 체크 박스를 시작으로, 16 개 체크 박스 정확히 한 행 아래로 이동 할 때마다 이동)는 true 할당 행 번호가 랜덤하게 선택된 행 번호와 일치 할 때 false입니다.

+1

정말 고마워요! 거대한 도움. 귀하의 깊이있는 설명 주셔서 감사합니다! – murderface

관련 문제