2017-12-19 3 views
1

에 대한 문은 내가 대체하려고 "만일"각각 "에 대한"또는 "동안"에 의해 "만일": 이미이 시도하지만 문제는 내가 돈이다사용의 대안 체크 박스

if (CheckObject1.Checked) 
    XRPC.SetMemory(8184, value); 
if (CheckObject2.Checked) 
    XRPC.SetMemory(7848, value); 
[...] 
if (CheckObject20.Checked) 
    XRPC.SetMemory(1800, value); 

' t는 체크 박스의 끝에서 수를 증가하는 방법을 알고 :

int current = 8184; 
int X = 1; 
while (current > 1800) 
{ 
    if (CheckObjectX.Checked) // regex? 
     XRPC.SetMemory(current, value); 
    X += 1; 
    current -= 336; 
} 

내가 모르는 정규 표현식 "체크 박스"... 어떤 생각에 사용할 수 있다면?

+0

'checked'는'bool' 값이고'regex'가 필요 없습니다. – LenglBoy

+1

배열이나 목록에 확인란을 저장할 수 있습니다. –

+0

checkboxarray를 시도했는데 루프에서 checkbox [i]를 사용할 수 있습니까? –

답변

2

모든 확인란을 목록에로드하고이를 반복해야합니다. 또는 더 나은, 그들을 사전에로드 할 수있는 열쇠로 int, 그리고 값으로 확인란, 그래서 그들은 '순서대로'액세스 할 수 있습니다.

또는 정수형 키를 저장하기 위해 확인란의 Tag 속성을 사용하고 일치하는 정수 (사전 사용 제안과 결합 될 수도 있음)가있는 항목을 찾아 액세스하십시오.

이 문제를 해결하는 데는 여러 가지 방법이 있지만 변수 이름을 사용하지 마십시오.

3

이 경우는 Controls.Find 사용할 수 있습니다 윈폼 및 LINQ :

int current = 8184; 
int X = 1; 
while (current > 1800) 
{ 
    CheckBox CheckObjectX = this.Controls.Find("CheckObject"+X, true).OfType<CheckBox>().SingleOrDefault(); 
    if (CheckObjectX != null && CheckObjectX.Checked) 
     XRPC.SetMemory(current, value); 
    X += 1; 
    current -= 336; 
} 

가 같은 부모 컨트롤의 모든 것과 중첩되지 않은 경우에는 두 번째 매개 변수로 false을 통과하고 (컨테이너와 this을 대체 할 수있는 등 myCheckBoxPanel). 그것은 더 효율적일 수 있습니다.