与技术无关的话留到一楼说、直接说问题
自定义了一个控件、是:UserControl的
这个控件内、自己添加了一个可以理解为ID的属性、还添加了一个bool型的属性用来表示开关
在Form中、需要动态添加这个控件、为了方便理解、比如说需要动态添加5个、Add的时候设置ID分别为1、2、3、4、5
开关都为false(关)、开关在自定义控件类中click事件
这5个开关、最多可以打开一个、也就是说、比如单击1、1打开了、然后点击3、3打开、这时候1就要自动关闭
以前提过这个问题、是获取不到上一个操作的ID、我在自定义控件类中建了一个static int的变量、解决了这个问题
但是现在新问题来了、以上边的例子、我点了3以后、我可以得到上一个操作的是1、但是我怎么凭借这个1、得到ID为1的这个自定义控件的对象呢?得不到1的对象、就无法去关闭1、因为现在操作的是3、1的ID得到了、1的对象没了
因为是自动生成的、所以不运行的时候根本没这个控件的实例、一直想不通这个问题

解决方案 »

  1.   

    UserControl uc = this.Controls[id] as UserControl;// UserControl代替你的名称
      

  2.   

    额、这个我也想过、这段代码是在form中写的、因为我的自定义控件是动态添加的、也就是说原本form上是没有的、添加的代码在formLoad中、所以不运行是没有这个对象的、所以this.Controls[id]是不可以的
      

  3.   

    解决的办法很多,最原始的模型是你维护一个当前打开的ID,同时维护一个ID与其代表控件的映射关系,比如Dictionary<int, UserControl>、List<UserControl>遍历找ID,等等
      

  4.   

    把UserControl放到字典中,需要操作时,从字典中取出操作.
    又或者遍历所有的UserControl全部重新设置为False,被点击的设为True,当然这么做,有点恶劣..
      

  5.   

    多谢4楼5楼
    我去试试Dictionary、怕有什么不懂的问题、待会结贴、稍等
      

  6.   

    同意楼上的。UserControl作为object 放到字典里。然后就可以通过操作指定索引的字典对象去操作这个UserControl了