求助!!!!多个checkbox分组要求组中至少有一个是checked

footfly 2003-10-21 10:10:22
求助::有30个checkbox分成10个组,每组3个.如何实现每组至少有个checkbox是
checked.是不是要用到那个函数啊?怎么分组?好像用Groupbox不行?


可能这个问题有点菜,还请大家帮帮我这菜鸟!!!!

谢谢!!!

...全文
112 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzh54zzh 2003-10-22
  • 打赏
  • 举报
回复
界面上是一个GroupBox1里面有3个checkbox。把checkBox1,checkbox2,checkbox3对应于相应的单击事件即可。还调试通不过么?
zzh54zzh 2003-10-22
  • 打赏
  • 举报
回复
function isChecked(ParentControl: TWinControl): Boolean;
这个函数你加上了吗?
你不要在上面声明。
整个单元如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure CheckBox3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function isChecked(ParentControl: TWinControl): Boolean;
var
i: Integer;
s: boolean;
begin
for i := 0 to ParentControl.ControlCount - 1 do
begin
s := TCheckBox(ParentControl.Controls[i]).Checked;
if s then
begin
Result := True;
exit;
break;
end;
end;
Result := False;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if not isChecked(GroupBox1) then
CheckBox1.Checked := True;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if not isChecked(GroupBox1) then
CheckBox2.Checked := True;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
if not isChecked(GroupBox1) then
CheckBox3.Checked := True;
end;

end.
zhp97 2003-10-22
  • 打赏
  • 举报
回复
是不是少引用了单元,找找ischecked函数是在哪个单元里
zzh54zzh 2003-10-21
  • 打赏
  • 举报
回复
以下测试通过
在一个GroupBox组里有3个CheckBox:
至少有一个CheckBox是Checked ^_^
function isChecked(ParentControl: TWinControl): Boolean;
var
i: Integer;
s: boolean;
begin
for i := 0 to ParentControl.ControlCount - 1 do
begin
s := TCheckBox(ParentControl.Controls[i]).Checked;
if s then
begin
Result := True;
exit;
break;
end;
end;
Result := False;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if not isChecked(GroupBox1) then
CheckBox1.Checked := True;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if not isChecked(GroupBox1) then
CheckBox2.Checked := True;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
if not isChecked(GroupBox1) then
CheckBox3.Checked := True;
end;
footfly 2003-10-21
  • 打赏
  • 举报
回复
TO:ZZH54ZZH

谢谢!!!是不是函数搞错了,你再帮我想想.
tanqth 2003-10-21
  • 打赏
  • 举报
回复
把每三个放到一个PANEL面,然后对PANEL.CONTROLS操作!
zzh54zzh 2003-10-21
  • 打赏
  • 举报
回复
sorry
我试了一下
GroupBox1.ComponentCount 取不出来-_-!
zzh54zzh 2003-10-21
  • 打赏
  • 举报
回复
function isChecked: Boolean;
var
i: Integer;
begin
for i := 0 to GroupBox1.ComponentCount - 1 do
begin
if TCheckBox(GroupBox1.Components[i]).Checked then
begin
Result := True;
break;
exit;
end;
end;
Result := False;
end;
footfly 2003-10-21
  • 打赏
  • 举报
回复
惨啊....测试通不过啊 出现下面的错误:

[Error] Unit1.pas(32): Undeclared identifier: 'ischecked'

我找了下没发现有ISCHECKED的函数啊是不是我搞错了还是怎样?

大家来看看啊
l_xiaofeng 2003-10-21
  • 打赏
  • 举报
回复
把每三个放到一个PANEL面,然后对PANEL.CONTROLS操作!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧