导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2018/6/27 12:12:42
标题:
加入我的收藏
楼主:
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,居然没反应,调试了一上午,就是显示不出来,到底哪里错了?
----------------------------------------------
-
作者:
2018/6/27 12:32:01
1楼:
你 DataModule1 上能放按钮?
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/27 12:34:38
2楼:
这代码真强。。。 话说,你的button是啥?ado组件么? 那么你的next放在for里面?
----------------------------------------------
--
作者:
2018/6/27 12:38:35
3楼:
顶楼上。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/27 13:44:18
4楼:
FindComponent不用指明你要操作的窗体么?一楼说的就这个意思。 除非你with DataModule1 do之前,还有个with XXX窗体 do。
----------------------------------------------
-
作者:
2018/6/27 17:13:32
5楼:
顶 2楼 哈哈哈哈哈哈
----------------------------------------------
哦哟喂,看过来: http://zelig.cn
作者:
2018/6/28 8:00:15
6楼:
这是主界面的show事件里的一段代码,其中with DataModule1 do 是引用数据模块,button是个adoquery,btn是24个按钮的名称,比如:btn1,btn2,btn3....我只是想主页面显示的时候,循环把数据库里的每个按钮的名称显示出来,主要是想以后要是修改某个按钮名称就不要编译源程序了,直接修改数据库里的数据
----------------------------------------------
-
作者:
2018/6/28 8:45:55
7楼:
FindComponent前面加上主窗体: 主窗体.findComponent; 不加FindComponent,搜索的是DataModule。
----------------------------------------------
-
作者:
2018/6/28 8:50:09
8楼:
主窗体. 只是特例,对于很多情况都会发生你不希望发生的问题。 这种时候,不建议用 with,可以解决所有问题。
----------------------------------------------
(C)(P)Flying Wang
作者:
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进行赋值,用循环的方式应该是最简洁的,逼着我用最笨的方式.
----------------------------------------------
-
作者:
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;
----------------------------------------------
-
作者:
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;
----------------------------------------------
-
作者:
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
作者:
2018/6/28 10:19:40
12楼:
把adoquery命名为button,这个已经不是技术问题了 这是道德问题!这是对每一个查看代码的人的侮辱鄙视和无视... 都已经十几楼了,还没有人对这个问题开骂,你们都好文明啊,向大家学习
----------------------------------------------
-
作者:
2018/6/28 10:22:51
13楼:
应该只是做毕业设计而已,还没入门,楼上不能要求太高,呵呵。
----------------------------------------------
-
作者:
2018/6/28 11:01:44
14楼:
谢谢gong123456,谢谢好心帮助的人,其实用button命名adoquery,只是为了容易识别,测试阶段我喜欢随便命名,程序都是自己做的,自己维护,没那么多讲究.
----------------------------------------------
-
作者:
2018/6/28 11:13:38
15楼:
顶12楼。 这样命名竟然还“容易识别”,难道楼主不感觉别扭吗?就好比称楼主为“兰州”。
----------------------------------------------
-
作者:
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 等
----------------------------------------------
就怕想不到,没有做不到的
作者:
2018/6/28 11:46:33
16楼:
to:12楼,有同感 不过应该还不到道德问题吧?呵呵,就是拿出门给别人看了会蛮碍眼的。 提一下自己感觉, 1.初学者在同一段程式中,如果是要处理跨越两个unit以上的程序内容,那建议还是少用 with。除非您已经很有把握,很清晰的确认其中程序不会相互干扰。 2.控件名称还是别用这种命名法吧。以后会搞死自己。 3.寻找控件 findcomponent 的写法,建议还是参考9楼的写法,一步一步来吧,不过with还是别用~
----------------------------------------------
-
作者:
2018/6/28 12:16:39
17楼:
btn 这种命名开头还有小写开头。都不是 DELPHI 官方的习惯。 DELPHI 官方的 各种类型名变量名,都是大写开头。 而且都是完整写法。例如 Form1 FormMain 等。
----------------------------------------------
(C)(P)Flying Wang
作者:
2018/6/28 16:23:47
18楼:
随便写的一个测试demo,为了确认功能能否实现,随性而为,看了大家的评论,批评居多,呵呵,大家批评的也对,谢谢大家的提点.
----------------------------------------------
-
作者:
2018/7/11 17:10:54
19楼:
为什么会有这种功能 你的BUTTON 是固定24个吗。。 既然是固定的 又何必FindComponent 或者直接动态创建button 就可以了
----------------------------------------------
-
作者:
2018/7/12 13:48:10
20楼:
先执行一下 MainForm.sGroupBox2.btn1.Caption := '123'; 看看能不能赋值
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..