回 帖 发 新 帖 刷新版面

主题:[原创]有个问题想要得到区友们的验证!

随机BUTTON的生成时有属性它
array_button[i].top:=50+((i-1) div x) *20;//x是全局变量
array_button[i].left:=2+((i-1) mod x)*20;
array_button[i].onmousedown:=mybuttonclick;
 
在mybuttonclick()中用(sender as TButton).控制属性和事件
但还是不知道具体的array_button[i]的i
我想问:是不是用
var weizhi,a,b :integer
begin
a:=(sender as TButton).left;
b:=(sender as TButton).top;
weizhi:=(((b-50)div 20)*x+(a-2)div 20)+1;
end; 
就可以反向得到 i的值啊?或者说还有什么更好的办法,比如直接用某个函数实现呢?

回复列表 (共8个回复)

沙发

1、你用的是动态的事件,又是很多Button公用一个事件,好像只有Sender能取到。

板凳

没这么复杂,你可以用很多种方法实现,如tag例:
for i=1 to  20 do begin
mybutton[i] := Tbutton.create(nil);
mybutton[i].tab := i;end;

onbuttonclick:
showmessage('你按的是第'+inttostr(sender.tag)+'个button');

3 楼

打错一个字母,mybutton[i].tag:=i;

4 楼

好的,谢谢你,我去试试你的做法,但我用了我的方法,用(SENDER AS BUTTON)的TOP和 LEFT两个属性,编译是没有问题,我想应该还是可以反向求得I值的,因为虽然是动态产生的,但在其没有生成另外的BUTTON组之前它们的TOP和LEFT 还是不会变的

5 楼

我试了一下.果然高手的方法就是好,能够运行,而我用的哪个方法提示错误
[Fatal Error] Could not create output file 'D:\Program Files\Borland\Delphi7\Projects\Project1.exe'
现在这个问题是解决了,但我还有点担心,想问:我的button1.tag 为0是什么意思,会不会与mybutton[i].tag:=i;发生冲突啊?要是我还还有静态button2,那会不会通过mybutton[i].tag:=i;把我的button2.tag覆盖或者存在重复啊~~

6 楼

并且 为什么我用
var weizhi,a,b :integer
begin
a:=(sender as TButton).left;
b:=(sender as TButton).top;
weizhi:=(((b-50)div 20)*x+(a-2)div 20)+1;
end; 这个方法会产生这样的错误
[Fatal Error] Could not create output file 'D:\Program Files\Borland\Delphi7\Projects\Project1.exe'
 而用了cilix
的方法就没有这个问题了呢?很难想通哦
 

7 楼

delphi下所有的控件在创建时TAG值都为0,所以应该让I从非0的值开始

6楼的那个方法理论上编译应该不会有问题,出现那个问题应该还有其他的警告或是错误信息

8 楼

cilix 请问可以加你的QQ吗?感觉这样问与答 太慢了,不过要是加了你的QQ的话,你在分数上可能会有点损失,呵呵~~~理解

我来回复

您尚未登录,请登录后再回复。点此登录或注册