Q&A

  • [질문] 여러개의 체크박스중 하나라도 체크되면 ON / 전부해제일경우 Off
고수님들 도와주십시요..

동적으로 체크박스를 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;
3  COMMENTS
  • Profile
    김현수 2010.06.07 21:49
    <!--CodeS-->
    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-->
  • Profile
    신의윤 2010.06.07 23:45
    우선 답변 정말 감사드립니다.

    답변주신 코드를 적용해보니

    체크할때는 그림이 보이는데
    체크해제시에는 그림이 없어져야하는데 그림이 남아있습니다. ㅠㅠ


    답변주신 코드를 분석해보고 있는데요.
    보통은 Result값이 false이다가 하나라도 체크가되면 Result가 true가 되어 그림이 보이게 됩니다.
    그런데 해제하였을때는 그림이 사라져야하는 구문의 부분을 잘모르겠습니다.

    도와주세요~
  • Profile
    신의윤 2010.06.08 00:03
    일단 다른분의 도움으로 해결은 하였습니다.

    댓글 달아주셔서 다시한번 감사드립니다.