用一个checklist控件来做为多选题的选择项,选项为 A B C D E F
问题1:如何将选中的项组合成字符串形式存入数据库,如:ABC   ACD  ADEF
问题2:如何在数据导航时将根据已经存入数据表字段中的ABC ACD 等数据在checklist控件中自动选中该项.
谢谢!

解决方案 »

  1.   

    procedure TForm1.BitBtn2Click(Sender: TObject);
    begin
      //设置好CheckListBox的Items:A,B,C,C
      CheckListBox1.Checked[0]:=true;//A选中
      //...
      ShowMessage(CheckListBox1.Items.Strings[0]);//Show A
    end;
      

  2.   

    procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to CheckListBox1.Items.Count-1 do
      begin
        if CheckListBox1.Items.Strings[i]=Edit1.Text then
          CheckListBox1.Checked[i]:=true;  
      end;
    end;从数据库读数据再设置,大概也就这个方法,你试试吧。
      

  3.   

    第一个问题已解决,第二个问题不知道如何把一个字符串ABC分解成字符数组,从而对应在CheckListBox选中相应项
      

  4.   

    循环来获得选择项目for i:=0 to checklist.items.count-1 do begin
      if checklist.check[i] then
        key:=key+checklist.items.string[i]+',';
    end;然后你自己来拆分,可以放到一个stringlist里,根据","来拆分起来
    两层循环即可
      

  5.   

    var sl:TStringList;
        i,j:integer;
    begin
      sl:=TStringList.create;
      sl.Delimiter:=',';
      sl.DelimitedText:='A,B,C';
      for i:=0 to checklist.items.count-1 do begin
        for j:=0 to sl.count-1 do begin
          if chkecklist.items.string[i]=sl.strings[i] then
            checklist.check[i]:=true;
        end;
      end;
    end;
    没有IDE,有可能有错误,自己调试下吧,大概就这意思
      

  6.   


    var
      b: string;
    begin
      b:= 'AC';
      for i:= 0 to length(b) - 1 do
        checklistbox1.Checked[ord(b[i+1])-65]:= true;
    end;
      

  7.   

    非常感谢,用dinoalex 的方法可以了,可对您的代码看不太懂,能解释一下吗?
    shuihan20e 的方法也是可行的,只是我的字符串没有符号分割,是连在一起的,用dinoalex的方法成功,再次感谢
      

  8.   

    主要是 ord(b[i+1])-65 这一段,为什么要-65呢?
      

  9.   

    对了,忘记跟你说,请确保你的'AC'这些都是大写的因为 A 的序号是 65
      

  10.   

    只想判断除ABCDEF之外的字符均是非法字符,怎么判断