고수님들 도와주십시요..
동적으로 체크박스를 22개 만들었는데.
초기에 그림이 숨어있는상태에서
22개의 체크박스중 하나라도 체크가 된 우 화면에 그림이 나타나게 하고.
체크박스가 모두 해제상태일 경우 화면에 그림이 없어지게 하고 싶습니다.
제가 작성한 소스를 구동시켜보면
1. 1개를 체크할때는 그림이 나타나지않고 몇개 이상 체크를해야만 그림이 나타나고
2. 모두 해제가 되지 않았는데도 그림이 없어져버리는데
뭐가 잘못인지 모르겠네요...
어떤식으로 해야하는지 조언 부탁드립니다.
간략소스
public //전역변수에 체크박스 선언
~~
LoopGroup: array [0..9] of TGroupBox; // 동적배열(그룹박스널 10개 생성)
Loop1: array [0..21] of TCheckBox; // 동적배열(체크박스널 22개 생성)
~~
end;
procedure TForm1.FormCreate(Sender: TObject); //폼이 생성될때 체크박스 생성 및 OnClick 이벤트 등록
~~
Loop1[i].OnClick := chkFire;
~~
end;
// 체크박스에 OnClick이 발생되면 실행하라.
procedure TForm1.chkFire(Sender: TObject);
var
i : integer;
chk : array [0..9] of integer;
begin
chk[0] := 0;
for i :=0 to length(Loop1) do // 체크박스 0번 부터 22번까지 돌기 위한 for문
begin
if Loop1[i].Checked= true then //체크박스가 true 이면
begin
chk[0] := chk[0] + 1; //chk에 1을 더해주어라.
end
else if Loop1[i].Checked= false then // 체크박스가 false이면
begin
chk[0] := chk[0] - 1; //chk에 1을 빼주어라.
end;
end;
if chk[0] > 0 then // chk가 0보다 크면 (chk가 0보다 크다는것은 체크박스가 하나라도 체크가 되어있다는 뜻)
begin
image2.Visible := true; // 그림이 화면에 나타나라
end else if chk[0] <= 0 then //chk가 0 보다 작거나 같으면 (chk가 0이나 음수인 경우는
begin
image2.Visible := false; // 그림이 화면에 보이지 않게하라.
end;
function TForm1.IsChecked: Boolean;
var
I: Integer;
begin
Result := False;
for I : = 0 to Length(Loop1) - 1 do
begin
if Loop1[I].Checked then
begin
Result := True;
Exit;
end;
end;
end;
procedure TForm1.chkFire(Sender: TObject);
begin
image2.Visible := IsChecked;
end;
<!--CodeE-->