关于c#的Visible属性无法触发Click事件

我想程序运行的时候,点哪个picturebox,哪个的图就显示出来,但是如果一开始设置picutebox.visible=false的话,根本就触发不了clikc事件,这个怎么解决??
是这样的,我有很多picturebox放在一个TableLayoutpanel里面,现在想点击它们的代码都写在一个Picture_Click事件里,可以用picturebox p=sender as picturebox来确定点击的是哪个picturebox。假设点了第i个picturebox 就 p.image = MyImage[i](这是存放着资源图片的一个List)。 现在问题是 这个 i 咋得到呢?

不是触发不了,是无法触发,visible等于true时空间则被隐藏了,无法点击到它,你可以这样,把一个大panel假想分为10个大小均等的小块,然后在点击这个大panel时获取鼠标点击的坐标,然后判断点击的点属于哪个小块的范围,然后再把pictruebox显示在此(设置一下location就好了)追问

点不了的原因我知道的。恩,你说这个方法我试了下。现在问题在于怎么获取坐标后,怎么访问对应的picturebox。我现在有4*4个picturebox,是picturebox1,....16,现在如果鼠标点击了picturebox3的位置,我就得到r=0,c=2,但是picturebox不是一个数组,不然的话我可以picturebox[r*4+c + 1].show();

追答

这个简单啊,你可以通过字典集合Dictionary来做,key用来保存你的点击坐标换算成的一个值,value用来保存这个坐标对应的pictruebox,然后就可以 dic[坐标换算的值].Show()了
纯手打,希望能帮到你!

按照你追问的,你可以把每个Pictruebox的Tag用来保存它对应的要显示的图片,然后则可以string imgName=(sender as picturebox).Tag 得到图片的名字,如果你的图片是保存在集合里边,你就可以使用IndexOf来获取该图片名字保存在集合中的索引,最后你就可以这样了 :p.image = MyImage[i]

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-02
这个简单啊,你的picture命名按照picturebox1、picturebox2、picturebox3.....pictureboxN
然后picturebox p=sender as picturebox;
int i=int.Parse(p.Name.SubString(10,1));
这不就取到了,还有很多类似的方法追问

C# 我初学,很多不知道呢,不过我就知道肯定有办法的! 感谢啦

第2个回答  2014-03-02
要不你把picutebox的背景色设置成它后面的背景一样的颜色 这样估计看起来就像隐藏的
相似回答