안녕하십니까? 아직 날이 좀 덥네요.
다른 게 아니라 제가 폼에다 chechbox를 한 20개 정도 띄우는데 이것을
버튼의 click event로 처리할려니까 소스코드가 장난이 아니네요.
checkbox수만큼 라벨이 있고 editbox및 maskedit도 그만큼 있는데.. 이것을 속성을
각각 color바꾸고, disable시키고 checked시키고 이러니까 이게 소스라인이 엄청
길어 지네요. 방법이야 너무 간단하지만.. 일일히 코딩을 하지 않고 해결하는 방법이
없을까 해서 질문을 올려봅니다. 제가 귀찮아서 그렇기도 하지만 이건 정말 시간낭
비다 싶은 기분이 들기도 합니다.
제가 구상한 방법은 델파이6.0에 있는 Action을 이용하는 것인데.. 잘 안되는 군요..
소스는 다음과 같습니다.
type
TForm1 = class(TForm)
Button1: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
ActionList1: TActionList;
Action1: TAction;
procedure Action1Execute(Sender: TObject);
procedure TForm1.Action1Execute(Sender: TObject);
begin
(sender as TCheckBox).State := cbChecked;
...
컴파일은 되지만 실행하면 casting에러가 나는 군요..
제가 생각하는 부분은 TcheckBox에 한꺼번에 먹이면 될 듯해서 했는데..
가만히 생각해보니까 각각의 체크박스를 인스턴스화 시키지 않고는 불가능 하겠더군요..
제가 하고자 하는 바는 버튼 한번으로 전체 체크박스에 대한 제어(칼라,사용유무 등)
를 하려고 하는 것입니다..
저로서는 이게 action으로 될지도 솔직히 모르겠습니다.
혹시 아시는 분 계시면 답변 부탁드립니다.
TAction 의 경우 해당 액션이 Sender로 올라옵니다.
그리고 폼의 속성을 보시면 ControlCount, Controls라는 속성이 있죠...
그러니깐.. 아래와 같이...
procedure TForm1.Action1Execute(Sender: TObject);
var
nIndex :Integer;
begin
// 지금 코드가 Action1 실행 코드이므로 아래는 'Action1'이 올라옵니다.
ShowMessage((Sender as TComponent).Name);
for nIndex := 0 to ControlCount - 1 do begin
// 여기 부분은 다 비슷하겠죠....
if Controls[nIndex] is TcheckBox then begin
(Controls[nIndex] as TcheckBox).Checked := TRUE;
// 모 딴 것들...
end;
end;
end;
오늘도 즐입다