作者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
推 stu87616:我現在採用了一個不知道好不好的做法 寫一個public class 09/16 16:39
→ stu87616:裡面放了很多 public static PictureBox Pic_0~127 09/16 16:40
→ stu87616:然後Find的函式放在Form_Load裡面 這樣就只需要抓一次 09/16 16:41
→ stu87616:之後提取的時候直接使用class裡面的成員 09/16 16:42
→ stu87616:這樣的做法是Find函式使用的次數的確變少 但是我多花不 09/16 16:42
→ stu87616:少記憶體來儲存這些動態生成的PictureBox 09/16 16:43
→ andymai:事先弄好的缺點你自己也說了~而且...這樣不算動態~如果使 09/16 17:09
→ andymai:用者要產生超過128個呢? XD 09/16 17:09
推 stu87616:噢XD 忘了沒說過 我這個project正好就是只會生出128個 09/16 17:11