作者proach (pazroach)
看板C_Sharp
标题Re: [问题] 如何触发动态产生的物件的Click事件
时间Sun Sep 16 10:05:51 2012
※ 引述《stu87616 (以光为名)》之铭言:
: ※ 引述《proach (pazroach)》之铭言:
: : 还是因为什麽因素,你在 runtime 时创造了不知道名字的 Control?
: 恩,因为其实是生成了很多个
: 创造的时候用了个简单的for回圈
: Name的属性是Pic+数字这样
: 而且创造的内容是写在Form_Load里头,
: 操作的程式码在别的按钮或函式里面,
: 根本也呼叫不到@@(这部分是不是我有什麽弄错了?),
: 说实在每次要去抓动态产生的物件都要Find一下我也很不喜欢呢( ̄ー ̄;)
: var ← 这个类别好像也不能放在外面当全域变数使用,
: (不然我很想这麽做,不然我次在不同的函式内要用都得Find一次)
其实差不多就是 andymi 讲的那样吧?
在 runtime 时产生了很多的 Controls, 但 method 是在写程式时写的,
因此你只能将动态产生的 Controls共用同一个或数个 method.
例如产生 List<Button> MyButtons, 生出一百个之後,通通都是
MyButtons[i].Click += new EventHander( Shared_Method );
之後在 Shared_Method( objet sender,... )内,用 sender确认
是谁被按到的。我用过三个方法,前两个跟您相同,看 Name 决定,
或是扫瞄座标来决定,另一个是直接扫瞄所有的 MyButtons,
看谁 == 就是他啦。
我比较喜欢在产生时,就生出一个特定的字串当 Name,抓到 sender的 Name
之後,直接 switch做动作。
不过以上的方法我都没测过执行效率,或者有高手可以指点一二,感谢感谢 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.199.21
1F:推 stu87616:我现在采用了一个不知道好不好的做法 写一个public class 09/16 16:39
2F:→ stu87616:里面放了很多 public static PictureBox Pic_0~127 09/16 16:40
3F:→ stu87616:然後Find的函式放在Form_Load里面 这样就只需要抓一次 09/16 16:41
4F:→ stu87616:之後提取的时候直接使用class里面的成员 09/16 16:42
5F:→ stu87616:这样的做法是Find函式使用的次数的确变少 但是我多花不 09/16 16:42
6F:→ stu87616:少记忆体来储存这些动态生成的PictureBox 09/16 16:43
7F:→ andymai:事先弄好的缺点你自己也说了~而且...这样不算动态~如果使 09/16 17:09
8F:→ andymai:用者要产生超过128个呢? XD 09/16 17:09
9F:推 stu87616:噢XD 忘了没说过 我这个project正好就是只会生出128个 09/16 17:11