我在一个窗口中放了好7个CheckBox控件,表示星期一到星期七,程序运行时让用户选择某几个日期,我该怎样才能简便地判断出用户选择了哪几个星期呢? 我想一个个的去判断不是最好的办法吧?
解决方案 »
- 求Delphi6访问VC编写的DLL的例子
- 問一個好基礎的問題,關於繼承的
- 请问delphi中有没有类似C++中的‘\n’转义换行符?
- 获取机器的硬盘号,或者网卡号?
- 请问在用fastreport时,如何根据Memo的字段长度动态更改MasterData的高度?
- 关于GDI32.DLL的问题
- 怎样设置excel的打印设置?
- 在使用DBLookupListBox时,怎么编程让它选中第一条记录?
- 如何关闭计算机?
- OleContainer1.LoadFromStream(olestream)出错 “ invalid stream format”???
- 各位大侠,帮帮忙呀.三层数据连接问题
- 如何实现dbgrid中符合某些条件的记录及行的数值不能进行修改
//濡備笅锛屾妸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;
begin
if TCheckBox(Sender).Checked then Checks.Add(TCheckBox(Sender).Caption)
else Checks.Delete(Checks.IndexOf(TCheckBox(Sender).Caption));
end;
我认为上面的这一句话非常关键,也非常好,
为1-7 分别代表星期一到星期天把所有的checkbox的Click事件都指定成如下的事件}procedure TForm1.CheckBox1Click(Sender:TObject);
begin
CheckWeeks[TCheckBox(Sender).tag-1]:= TcheckBox(Sender).Check;
end;
恭喜你,终于找到问题的答案了
试试VCL中提供对象的方法,看看有什么效果.
-----------------------------似乎遍历7个CheckBox与遍历数组的7个元素没有什么区别。
begin
这里还有其它的程序代码
for i:=0 to self.ComponentCount do
begin
varOb:=self.Components[i];
if varOb is TCheckBox then
CheckWeeks[(VarOb as TCheckBox).tag]:=(VarOb as TCheckBox).checked;
end;
end;
end;
受到各位高手们的启发,我编写了上面的一段程序,用于检查从星期一到星期日的七个检查框。经过我的单步跟踪,发现数组CheckWeeks能够得到正确的值,但该过程返回到调用时却会报告"List Index out of Bounds(19)",真是让人郁闷啦,问题可能出在哪里呢?
敬请高手们再给予关注。
For I;=0 to Self.Componentcount-1 do 忘了减1了。
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;
----------------------------
可以了