怎样遍历窗口中的CheckBox控件,小弟我不想一个个去判断它啊
怎样遍历窗口中的CheckBox控件,我不想一个个去判断它啊。
我在一个窗口中放了好7个CheckBox控件,表示星期一到星期七,程序运行时让用户选择某几个日期,我该怎样才能简便地判断出用户选择了哪几个星期呢?
我想一个个的去判断不是最好的办法吧?
------解决方案--------------------
//鎴栬€呯敤涓€涓猅StringList
//濡備笅锛屾妸7涓狢heckBox鐨凮nClick浜嬩欢澶勭悊杩囩▼鍏ㄩ儴鎸囧悜CheckBox1Click杩囩▼
var
Checks : TStringList;
procedure TForm1.Button1Click(Sender: TObject);
var
Index : integer;
Rst : string;
begin
Rst := '鐢ㄦ埛閫変腑鐨勬湁: ';
if Checks.Count > 0 then
for Index := 0 to Checks.Count-1 do
Rst := Rst + Checks[Index] + '; ';
ShowMessage(Rst);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Checks := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Checks.Free;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if TCheckBox(Sender).Checked then Checks.Add(TCheckBox(Sender).Caption)
else Checks.Delete(Checks.IndexOf(TCheckBox(Sender).Caption));
end;
------解决方案--------------------
var CheckWeeks:array of [0..6] of boolean; {星期的数组 ,让后把CheckBox 的tag设置
为1-7 分别代表星期一到星期天把所有的checkbox的Click事件都指定成如下的事件}
procedure TForm1.CheckBox1Click(Sender:TObject);
begin
CheckWeeks[TCheckBox(Sender).tag-1]:= TcheckBox(Sender).Check;
end;
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
fori:Integer;
CompName,MsgStr,StrMsg:String;
begin
for fori := 0 to self.ControlCount -1 do
begin
if not (self.Controls[fori] is TCheckBox ) then continue;
begin
CompName :=(self.Controls[fori] as TCheckBox).Caption;
if (self.Controls[fori] as TCheckBox).Checked then
begin
MsgStr:=MsgStr+CompName+ '| ';
end
else
begin
StrMsg:=StrMsg+CompName+ '| ';
end;
end;
end;
showmessage( '选中的星期有 '+MsgStr+#10#13+ '没有选中的有 '+StrMsg);
end;
----------------------------
可以了
我在一个窗口中放了好7个CheckBox控件,表示星期一到星期七,程序运行时让用户选择某几个日期,我该怎样才能简便地判断出用户选择了哪几个星期呢?
我想一个个的去判断不是最好的办法吧?
------解决方案--------------------
//鎴栬€呯敤涓€涓猅StringList
//濡備笅锛屾妸7涓狢heckBox鐨凮nClick浜嬩欢澶勭悊杩囩▼鍏ㄩ儴鎸囧悜CheckBox1Click杩囩▼
var
Checks : TStringList;
procedure TForm1.Button1Click(Sender: TObject);
var
Index : integer;
Rst : string;
begin
Rst := '鐢ㄦ埛閫変腑鐨勬湁: ';
if Checks.Count > 0 then
for Index := 0 to Checks.Count-1 do
Rst := Rst + Checks[Index] + '; ';
ShowMessage(Rst);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Checks := TStringList.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Checks.Free;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if TCheckBox(Sender).Checked then Checks.Add(TCheckBox(Sender).Caption)
else Checks.Delete(Checks.IndexOf(TCheckBox(Sender).Caption));
end;
------解决方案--------------------
var CheckWeeks:array of [0..6] of boolean; {星期的数组 ,让后把CheckBox 的tag设置
为1-7 分别代表星期一到星期天把所有的checkbox的Click事件都指定成如下的事件}
procedure TForm1.CheckBox1Click(Sender:TObject);
begin
CheckWeeks[TCheckBox(Sender).tag-1]:= TcheckBox(Sender).Check;
end;
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
fori:Integer;
CompName,MsgStr,StrMsg:String;
begin
for fori := 0 to self.ControlCount -1 do
begin
if not (self.Controls[fori] is TCheckBox ) then continue;
begin
CompName :=(self.Controls[fori] as TCheckBox).Caption;
if (self.Controls[fori] as TCheckBox).Checked then
begin
MsgStr:=MsgStr+CompName+ '| ';
end
else
begin
StrMsg:=StrMsg+CompName+ '| ';
end;
end;
end;
showmessage( '选中的星期有 '+MsgStr+#10#13+ '没有选中的有 '+StrMsg);
end;
----------------------------
可以了