作者proach (pazroach)
看板C_Sharp
标题Re: [问题] 如何触发动态产生的物件的Click事件
时间Sat Sep 15 21:10:44 2012
※ 引述《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