Re: [問題] 如何觸發動態產生的物件的Click事件
※ 引述《stu87616 (以光為名)》之銘言:
: 我動態new了幾個PictureBox出來,
: 並且+=給它們Click的事件,
: 讓使用者在按下這些圖片的時候會有所動作;
: 但另外我也想在別的地方,某些別的事件也會觸發按下那些圖片的事件。
: 通常已經存在的物件(並且有Click事件),
: 要從別的地方觸發Click很簡單,大概就像是:
: button_Click(null, e);
: 但動態生成出來的PictureBox就不知道怎麼寫了,
: 我現在的寫法是:
: var thePic = (PictureBox)Controls.Find("物件Name", true)[0];
: //先用Name屬性把我要的物件抓出來
: thePic_Click(null ,e);
: //就我所知道寫法是這樣...不過沒過,編譯器是完全看不懂的程度
: //順帶一提我的PictureBox Click觸發函式名稱就是Pic_Click,依樣畫葫蘆而已
: 不知道哪裡做錯了,Google半天也理不出所以然來,只好來板上問問看眾高手們。
: 另外再一問,像這樣使用Controls.Find找出那些動態生成的物件的做法,是好的嗎?
: 這樣問好像有點奇怪,只是我一直覺得這種做法似乎有點...大費周章?
: 比起.Find,.GetChildAtPoint直接抓座標的做法(假設我很確定它就在那裏)會比較優嗎?
: 懇請賜教
其實我看不懂你的意思,交流一下,有錯請指教 :)
關鍵字大概是 programatically add controls to ... 之類的術語,
要動態產出一個 PictureBox 並不難,其實打開你的 Form1.designer.cs
看一下照抄一次就出來了。要掛個 event handler 也是一樣的寫法。
要虛擬產生 click 也很簡單,用你的方法 thePic_Click( null, e );
還要去定義 e, 不如直接 thePic_Click( null, null); 也是會過的,
只要你確定 method那邊不會用到 e 的內容即可。
我的問題是,既然物件是你動態產生的,你應該有它的名字,例如
PictureBox pictureBoxRuntime; 之類的... 所以寫法都一樣,
還是因為什麼因素,你在 runtime 時創造了不知道名字的 Control?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.202.200
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章