不要告诉我,写一个函数来判断某个选项是否被选中,然后执行相关代码。我的代码是这样:    假设在一个form里有3个checkbox,A,B和C,每个checkbox是一个选项,代表是否显示一个clientdataset的相应的列。var 
  sumA,sumB,sumC:integer;
  I:integer;
begin
    sumA:=0;
    sumB:=0;
    sumC:=0;    //在程序里,首先要显示第一行的列标题,
    if A.checked then clientdataset.fielddef.add('A');
    if B.checked then clientdataset.fielddef.add('B');
    if C.checked then clientdataset.fielddef.add('C');
    clientdataset.createdataset;  for I:=0 to 10 do
  begin
    //然后再显示相应的数据
    clientdataset.append;
    if A.checked then 
    begin
       clientdataset.fieldbyname('A').value=1;
       sumA:=sumA+1;//对每一列进行一个合计
    end;
    if B.checked then 
    begin
       clientdataset.fieldbyname('B').value=2;
       sumB:=sumB+2;
    end;
    if C.checked then 
    begin
       clientdataset.fieldbyname('C').value=2;
       sumC:=sumC+3;
    end;
    clientdataset.post;
  end; //for end.    //最后显示每一列的小计
    clientdataset.append;
    if A.checked then  clientdataset.fieldbyname('A').value:=sumA;
    if B.checked then  clientdataset.fieldbyname('B').value:=sumB;
    if C.checked then  clientdataset.fieldbyname('C').value:=sumC;
    clientdataset.post;end;    问题:在上面的代码中,需要判断三次“A.checked” ;如果这个判断不仅仅是一个“A.checked”那么简单,而且算法比较复杂而且选项很多,那程序的效率是很低的,而且在编程的时候,选项一多就会很繁琐。再假设所有的选项有它的特性,没有固定的规律可寻,比如:选项A是查询一个求和,选项B是查询一个求差,选项C是删除表,无法用循环实现的,如何设计一个比较优化的算法,使得它只判断最少的次数就能够达到上述目的呢?

解决方案 »

  1.   

    var 
      sumA,sumB,sumC:integer;
      ResultA,ResultB,ResultC:boolean;
      I:integer;
    begin
        sumA:=0;
        sumB:=0;
        sumC:=0;    //在程序里,首先要显示第一行的列标题,    ResultA:=A.checked;ResultB := B.Checked; ResultC :=C.Checked;
        if ResultA then clientdataset.fielddef.add('A');
        if ResultB then clientdataset.fielddef.add('B');
        if Resultc then clientdataset.fielddef.add('C');
    后面就对的都换,如果中间的过程很复杂,则可以把这三个变量换成过程.
      

  2.   

    对于只是求差/求和的统计在循环内直接计算出来,完成特环后再判断是否需要显示.如果选项是复杂的过程,则单独写过程,将选中状态作为参数传给过程,
      procedure ProcessCheckBoxA(checkboxA.checked);
    继续关注....