10个checkednbox,判断是哪个或那些选中并处理相应的事件,寻求简单算法。(50分)

  • 主题发起人 主题发起人 陌生的熟悉人
  • 开始时间 开始时间

陌生的熟悉人

Unregistered / Unconfirmed
GUEST, unregistred user!
10个checkednbox,判断是哪个或那些选中并处理相应的事件,寻求简单算法。

老板要求我查询能象“点菜”的方式查询,比如说有表:ID,字段一,字段二,字段三
我用的方法是一个Edit输入ID,用三个checkedbox表示字段一二三
当点确定时:if (checkedbox1:=true) and checkedbox2:=false) and (checkedbox2:=false) then
begin
........
end;
谁有更好的方法实现,麻烦把代码写出来,先谢谢~~~~~
 
用 as 试试看
 
用一个字符变量C
在checkedbox1等的点击事件中对C的相应位(bit)置0或置1
点击确认:case C
1:
2:
3:
4:
……
 
1:建立一个string变量tempstr,长度为10,打算分别放入入'0','1','2','3','4','5','6','7','8','9'。
2:在每一个checkbox的单击事件中写入如下代码
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if not checkbox1.checked then
tempstr[1]:='0'
else
tempstr[1]:='';
end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if not checkbox2.checked then
tempstr[2]:='1'//选中存入字符1。
else
tempstr[2]:='';//未选中存入空字符。
end;
.......
........
for i:=1 to 9 do
begin
case tempstr of
'0':begin
//处理字段一
continue;
end;
'1':begin
//处理字段二
continue;
end;
'2':begin
//处理字段三
continue;
end;
'3':...
.......
'9':begin
//处理字段十
continue;
end;
end;

 
楼上的速度好快啊。
开始看帖子的时候还没人回答,一会工夫就。。。呵呵。。。
是for i:=1 to 10 do//循环10次。散分快点哦,楼主,我正朝着5000分的大关努力奋斗哦。
 
假如有复选的情况呢?
 
说清楚,怎么个复选?
 
比如说:
3个checkedbox有这样的情况
一:checkedbox1:=true and checkedbox2:=false and checkedbox3:=false
二:checkedbox1:=true and checkedbox2:=true and checkedbox3:=false
三:checkedbox1:=true and checkedbox2:=true and checkedbox3:=true
四:checkedbox1:=true and checkedbox2:=false and checkedbox3:=true
五:checkedbox1:=false and checkedbox2:=false and checkedbox3:=true
六:checkedbox1:=false and checkedbox2:=true and checkedbox3:=true
^……………………………………………………………………………………
 
我不就是通过判断你10个checkedbox来选择需要处理的字段么。
在你10个checkbox的单击事件中对tempstr对应的字符进行控制,要么加'0','1',....'9':checkbox1->tempstr[1]
checkbox2->tempstr[2],checkbox3--->tempstr[3]......checkbox10-->tempstr[10]
当点确定时执行下面循环。根据你的查询条件找出对应的记录。再根据下面的循环对10个字段进行处理(checkbox为true,则处理,不为真,不处理,如此反复,直至处理完10个字段)
for i:=1 to 10 do//执行10次循环,也就是根据tempstr处理10个字段,而字符串里的字符实际是对应的checkbox的checked属性true或false
begin
case tempstr of
'0':begin
//处理字段一
continue;
end;
'1':begin
//处理字段二
continue;
end;
'2':begin
//处理字段三
continue;
end;
'3':...
.......
'9':begin
//处理字段十
continue;
end;
end;
举个例子:如果10个checkbox中有第1,第3,第5,第7,第9个checkbox没选中,那当点确定时只处理查询记录的第2,第4,第6,第8,第10个字段内容。

(3个checkedbox有这样的情况
一:checkedbox1:=true and checkedbox2:=false and checkedbox3:=false
二:checkedbox1:=true and checkedbox2:=true and checkedbox3:=false
三:checkedbox1:=true and checkedbox2:=true and checkedbox3:=true
四:checkedbox1:=true and checkedbox2:=false and checkedbox3:=true
五:checkedbox1:=false and checkedbox2:=false and checkedbox3:=true
六:checkedbox1:=false and checkedbox2:=true and checkedbox3:=true)
我们根据单击事件来处理checkbox的checked 是否选中和没选中。把选中时和没选中时的存入tempstr中,没选中存入'',选中存入'0', 下一个没选中存入'',选中存入'1',依次类推,直到第10个checkbox为止。
 
我写的难道满足不了你的要求??????????????/
 
procedure TForm1.Button1Click(Sender: TObject);
var sum,i:integer;
begin
for i:=0 to panel1.ComponentCount-1 do
begin
if panel1.Components is Tcheckbox then
if Tcheckbox(panel1.Components).Enabled then
sum:=sum+Tcheckbox(panel1.Components).Tag;
end;
case sum of
0: ;
1: ;
: ;
: ;
: ;
: ;
: ;
: ;
: ;
: ;
: ;
: ;
1023 : ;
else ;
end;
end;
end.
10个复选课就是1024种情况了。这样满足了吧。靠。有这么变态的吗
 
呵呵,晕死了,有个笨办法,
一、是用一个表临时来生成,选中一个就插入一个要查询字段名字到表中,同时写入(>、<、=)等条件,反之从表中删除一个。这样做有个好处就是系统中所有的查询只做成一个模块就OK了,应该算是较为通用单表查询模块。
直到最后,从表中读出数据生成查询语句。
二、可以用checkedbox的名字命名为和字段一样的名字,
q.sql.add('select * from ssss');
q.sql.add('where sss like ');
if checkedbox1.Checked then q.sql.add('and('+checkedbox1.Name+'=100)');
if checkedbox2.Checked then q.sql.add('and('+checkedbox2.Name+'=sss)');
....
if checkedbox10.Checked then q.sql.add('and('+checkedbox10.Name+'=aaa)');
q.open;

只有这第几句,给分吧。。。。。。。。。。。。。。。。。
 
个位的方法我领会一个晚上都领会不出来,刚刚学,自己太笨了。
 
你是否想一个checkbox控制一个字段 ,如果是,那我的回答没问题。
 
用CASE 就可以了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
551
import
I
后退
顶部