我在一个窗口中放了好7个CheckBox控件,表示星期一到星期七,程序运行时让用户选择某几个日期,我该怎样才能简便地判断出用户选择了哪几个星期呢?  我想一个个的去判断不是最好的办法吧?

解决方案 »

  1.   

    用一个数组记下这7个checkbox的引用,不然我觉得应该需要遍历组件。等待高人讲解..
      

  2.   

    我好像理解错了楼主关于遍历的含义,你的意思是不是说想知道哪几个checkbox被改过的意思呢?
      

  3.   

    用一个集合就行。在每个CheckBox的Change或Click事件里写代码,对集合进行处理。
      

  4.   

    //鎴栬€呯敤涓€涓猅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;
      

  5.   

    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;
    我认为上面的这一句话非常关键,也非常好,
      

  6.   

    大家说说,Delphi中的TCheckBox控件为啥不能象Html中的CheckBox控件那样有一个Value值属性呢,我想有了这个属性值的话,是不是对于编程有很大的方便性呢?
      

  7.   

    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;
      

  8.   

    真是高手啊,我怎么没想到用TAG属性来表示值呢?今天又学会了思考问题的方法啊,看来还是基础知识不牢的原因啊
      

  9.   

    >>今天又学会了思考问题的方法啊,看来还是基础知识不牢的原因啊
    恭喜你,终于找到问题的答案了
      

  10.   

    没事就翻翻这些控件的属性.看看有什么用.
    试试VCL中提供对象的方法,看看有什么效果.
      

  11.   

    怎样才能简便地判断出用户选择了哪几个星期呢
    -----------------------------似乎遍历7个CheckBox与遍历数组的7个元素没有什么区别。
      

  12.   

    var CheckWeeks:array of [0..6] of boolean;var i:integer;  varob:Tobject;
    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)",真是让人郁闷啦,问题可能出在哪里呢?
      敬请高手们再给予关注。
      

  13.   

    不好意思,我找到原因了。原因是for I;=0 to self.componentcount do一句上,应该是
    For I;=0 to Self.Componentcount-1 do 忘了减1了。
      

  14.   

    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;
    ----------------------------
    可以了