WEB控件有个属性可以直接获取它所在的PAGE类
WIN控件有一个FindForm方法也可以它所在的FORM
不过都必须从Control派生。
最通过定义接口来控制件控件和窗体的信息交互,利用Reflection效率低(只是个人看法)

解决方案 »

  1.   

    FindForm在设计时能正常取得Form的吗
      

  2.   

    not sure if you can get the form object through Site(ISite) property, I believe you have to use EnvDTE.DTE object
      

  3.   

    FindForm在设计时得到的Form类型的实力,控件是不可能知道Form的具体类型的吧
      

  4.   

    你是想在控件里获取所在FORM实例的数据吗?
    那你可以定义接口,建立一个FORM基础类实现这个接口,所有FORM从些类派生。
    控件就可以通过 FindForm打到FORM然后转成这个接口就可以操作了。
    接口的具体定义就看你自己的需要了。
      

  5.   

    当然是不能用到接口的了,
    因为做一个控件的话,因该能提供给任意的Form使用。所以还是需要Reflection的,但是具体的做法就不太清楚了
      

  6.   

    通过GetType()获取对象的Type,
    通过Type获取对象的属性,方法,成员等。
    如果不定义接口,你如何知道那个东西是你想要的?
      

  7.   

    举个例子吧,比如DataGrid的DataSource属性
    不论放在什么样的Form中,下拉候补中总能取到其中的关于Data的控件名
    虽然这部分功能是由环境提供的,但至少说明了在控件不知道Form类型的情况下可以得到它的信息。
      

  8.   

    控件有个属性Site(ISite),在设计时有效
    你在ISite.Container.Components这个列表中也许可以找到你需要的Form
      

  9.   

    举个例子吧,比如DataGrid的DataSource属性
    不论放在什么样的Form中,下拉候补中总能取到其中的关于Data的控件名
    他就是通过ISite.Container.Components找到的
      

  10.   

    ISite.Container.Components只能找到Button,Label之类的控件或组件,int string之类的就没有办法了
      

  11.   

    找到button之后,然后利用反射不就可以了么?
      

  12.   

    我还是觉得定义接口比较明确点。
    就算你知道类里有什么类型,但你是如何明确那就是你想根据东西?
    假设有一百个String类型,你如何知道那个才是你想要的?
      

  13.   

    楼主是否想要PropertyGrid的功能?