DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: lccg
今日帖子: 13
在线用户: 35
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 ltxubo (波仔) ▲▲▲▲△ -
注册会员
2018/6/27 12:12:42
标题:
给循环赋值没反应,到底哪里错了? 浏览:398
加入我的收藏
楼主:  with DataModule1 do
 begin
button.Open;
button.First;
for b:=1 to 24 do
begin
 // btn:= (FindComponent('btn' + inttostr(b)) as TsBitBtn);
  TsBitBtn(FindComponent('btn' + IntToStr(b))).Caption:=button.FieldValues['Caption'];
;
  //btn.Caption:=button.FieldValues['Caption'];
  button.Next;
end;
end;
郁闷,想实现动态为窗体上24个按钮循环添加caption,居然没反应,调试了一上午,就是显示不出来,到底哪里错了?
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/6/27 12:32:01
1楼: 你 DataModule1 上能放按钮?
----------------------------------------------
(C)(P)Flying Wang
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/6/27 12:34:38
2楼: 这代码真强。。。

话说,你的button是啥?ado组件么?
那么你的next放在for里面?
----------------------------------------------
--
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/6/27 12:38:35
3楼: 顶楼上。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wk_knife (wk_knife) ▲▲▲▲▲ -
盒子活跃会员
2018/6/27 13:44:18
4楼: FindComponent不用指明你要操作的窗体么?一楼说的就这个意思。
除非你with DataModule1 do之前,还有个with XXX窗体 do。
----------------------------------------------
-
作者:
男 mricy (Icy) ▲▲△△△ -
注册会员
2018/6/27 17:13:32
5楼: 顶 2楼 哈哈哈哈哈哈
----------------------------------------------
乜你咁蠢嘎!睇下佢点,嘿嘿..猫窝: www.icy6.com
作者:
男 ltxubo (波仔) ▲▲▲▲△ -
注册会员
2018/6/28 8:00:15
6楼: 这是主界面的show事件里的一段代码,其中with DataModule1 do
是引用数据模块,button是个adoquery,btn是24个按钮的名称,比如:btn1,btn2,btn3....我只是想主页面显示的时候,循环把数据库里的每个按钮的名称显示出来,主要是想以后要是修改某个按钮名称就不要编译源程序了,直接修改数据库里的数据
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ▲▲▲▲▲ -
盒子活跃会员
2018/6/28 8:45:55
7楼: FindComponent前面加上主窗体: 主窗体.findComponent;

不加FindComponent,搜索的是DataModule。
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/6/28 8:50:09
8楼: 主窗体. 只是特例,对于很多情况都会发生你不希望发生的问题。
这种时候,不建议用 with,可以解决所有问题。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ltxubo (波仔) ▲▲▲▲△ -
注册会员
2018/6/28 9:09:00
9楼: to:wk_knife
with DataModule1 do
begin
button.Open;
button.First;
for b:=1 to 24 do
begin
 // btn:= (FindComponent('btn' + inttostr(b)) as TsBitBtn);
  TsBitBtn(MainForm.sGroupBox2.FindComponent('btn' + IntToStr(b))).Caption:=button.FieldValues['Caption'];

  //btn.Caption:=button.FieldValues['Caption'];
  button.Next;
end;
end;
依然没反应,难道要让我对每个btn进行赋值,用循环的方式应该是最简洁的,逼着我用最笨的方式.
----------------------------------------------
-
作者:
男 gong123456 (DELPHI先生) ▲▲▲▲▲ -
普通会员
2018/6/28 9:14:53
9楼: with DataModule1.button do
begin
  Open;
  if recordcount > 0 then
    First
  else
    Exit;

  for b:= 1 to 24 do
  begin
    xBtn := xOBJ.FindComponent('btn' + IntToStr(b));
    if xBtn is TsBitBtn then
    begin
      TsBitBtn(xBtn).Caption:= FieldbyName('Caption').AsString;
      
      if not Eof then
        next
      else
        break; 
    end;
  end;
end;
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ▲▲▲▲▲ -
盒子活跃会员
2018/6/28 9:36:21
10楼: 楼主还要好好学习。

为啥主窗体后面要加Groupbox. 虽然bitbtn放在groupbox,不代表Components就包含在Groupbox下面。


type
  TForm2 = class(TForm)
    GroupBox1: TGroupBox;     //放一个groupbox
    BitBtn1: TBitBtn;         //放四个bitbtn在group里
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Label1: TLabel;        //在窗体上,groupbox外面放四个label
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
  Label1.Caption:='窗体的component数:'+IntToStr(self.ComponentCount);
  Label2.Caption:='GroupBox1的component数:'+IntToStr(self.GroupBox1.ComponentCount);

  Label3.Caption:='窗体的control数:'+IntToStr(self.ControlCount);
  Label4.Caption:='GroupBox1的control数:'+IntToStr(self.GroupBox1.ControlCount);
end;
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/6/28 9:38:25
11楼: TsBitBtn(MainForm.sGroupBox2.FindComponent('btn' + IntToStr(b))).Caption:=
如果 为 nil 不会发生 AV 错误吗?
不过 发生了 又如何。
这种简单的问题。
1 看书
2 DEBUG。
3 带上脑子。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 hezi4delphi (iDelphi) ▲▲△△△ -
注册会员
2018/6/28 10:19:40
12楼: 把adoquery命名为button,这个已经不是技术问题了

这是道德问题!这是对每一个查看代码的人的侮辱鄙视和无视...

都已经十几楼了,还没有人对这个问题开骂,你们都好文明啊,向大家学习
----------------------------------------------
-
作者:
男 mathsfan (小钟) ▲▲▲▲△ -
普通会员
2018/6/28 10:22:51
13楼: 应该只是做毕业设计而已,还没入门,楼上不能要求太高,呵呵。
----------------------------------------------
-
作者:
男 ltxubo (波仔) ▲▲▲▲△ -
注册会员
2018/6/28 11:01:44
14楼: 谢谢gong123456,谢谢好心帮助的人,其实用button命名adoquery,只是为了容易识别,测试阶段我喜欢随便命名,程序都是自己做的,自己维护,没那么多讲究.
----------------------------------------------
-
作者:
男 vclclx (vclclx) ▲▲▲▲△ -
注册会员
2018/6/28 11:13:38
15楼: 顶12楼。
这样命名竟然还“容易识别”,难道楼主不感觉别扭吗?就好比称楼主为“兰州”。
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ▲▲▲△△ -
注册会员
2018/6/28 11:38:55
16楼: 一般模块中是没有数据集控件存在的,用完就释放
命名规则还是规范的好,阅读起来舒服
视图
表格:Grid
树形:Tree
按钮
添加:btAppend
删除:btDelete
修改:btEditor
保存:btSave
放弃:btCancel

输入控件
eUser
eTime
等 'e'+字段名称

变量命名
i或l开头
比如:
iList
iStream
iField
lObject,iObject
传参命名
A开头
比如:
AText
ASubText
ACds

----------------------------------------------
就怕想不到,没有做不到的
作者:
男 akuan54 (SKL) ▲▲▲▲△ -
普通会员
2018/6/28 11:46:33
16楼: to:12楼,有同感
不过应该还不到道德问题吧?呵呵,就是拿出门给别人看了会蛮碍眼的。
提一下自己感觉,
1.初学者在同一段程式中,如果是要处理跨越两个unit以上的程序内容,那建议还是少用 with。除非您已经很有把握,很清晰的确认其中程序不会相互干扰。
2.控件名称还是别用这种命名法吧。以后会搞死自己。
3.寻找控件 findcomponent 的写法,建议还是参考9楼的写法,一步一步来吧,不过with还是别用~
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/6/28 12:16:39
17楼: btn 这种命名开头还有小写开头。都不是 DELPHI 官方的习惯。
DELPHI 官方的 各种类型名变量名,都是大写开头。
而且都是完整写法。例如 Form1 FormMain 等。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 ltxubo (波仔) ▲▲▲▲△ -
注册会员
2018/6/28 16:23:47
18楼: 随便写的一个测试demo,为了确认功能能否实现,随性而为,看了大家的评论,批评居多,呵呵,大家批评的也对,谢谢大家的提点.
----------------------------------------------
-
作者:
男 pankangkang (aaaa) ▲▲▲▲△ -
注册会员
2018/7/11 17:10:54
19楼: 为什么会有这种功能 你的BUTTON 是固定24个吗。。
既然是固定的 又何必FindComponent
或者直接动态创建button 就可以了
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2018/7/12 13:48:10
20楼:
先执行一下
MainForm.sGroupBox2.btn1.Caption := '123'; 
看看能不能赋值
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行39.0625毫秒 RSS