我用的是vs.net2003 呵呵比较低级了//现在的实现:通过传递this参数实现. 
// 注意我要把这个功能独立出来写成dll 供其他程序调用的,不传参是为了使用者的方便.public void setValue(Form frmTest) //想把参数去掉 不传参数,直接解析当前程序集,不知怎么修改 

  Type tFrm = frmTest.GetType(); 
  string strCtrlNm = "btn"; 
  string strCtrlProp = "Text"; 
  string strCtrlText = "修改后按钮文本"; 
  FieldInfo fiCtrl = tFrm.GetField(strCtrlNm,bindingAttr); 
  if(fiCtrl != null) 
  { 
    object fiCtrlValue = fiCtrl.GetValue(frmTest); //如何解析 
    if(fiCtrlValue != null) 
    { 
      PropertyInfo pi =  fiCtrlValue.GetType().GetProperty(strCtrlProp,bindingAttr); 
      if(pi != null) 
      { 
        pi.SetValue(fiCtrlValue,strCtrlText,null);  //设置Text属性的值 
      } 
    } 
  } 
问题点 
这种方法只能只对应了单独的窗体,调用时将this传进来, 如果很多窗体一个一个调用很麻烦,所以考虑不传参能不能实现,this这个关键字很特殊,虽说是类实列,它不仅仅指的是一个对象,不传参通过解析当前程序集不知能不能实现. 用下面的代码不知怎么写了??? 请教!!Process p = Process.CurrentProcess(); 
string asmName = p.ProcessName + ".exe";  // 当前程序集名 Assembly asm = Assembly.LoadFrom(asmName); Type[] tps = asm.GetTypes()   //获取所有类型  包括所有窗体,想通过遍历类型实现
foreach(Type tp in tps) 

  try 
  { 
    FieldInfo fi = tp.GetField(strCtrlNm,bindingAttr); 
    if(fi != null)
    {
       object fiValue = fi.GetValue(???????)  // 这儿不知怎么写了  发现些什么都不管用
           ......//同上
     } 
  } 
  Catch(Exception ex) 
  { 
    ...... 
  } 
} 关于这个问题,我也发了好几次贴  多发几分 众人拾柴火焰高嘛 *_* 

解决方案 »

  1.   

    GetValue中的参数是Object,没有Object哪来的Value啊,所以我觉得你应该先把所有的Object哪出来,再进行GetValue
      

  2.   

    FieldInfo   
    fi=new Form1().GetType().GetField("",BindingFlags.NonPublic|BindingFlags.Public|BindingFlags.Instance);   
      if(fi!=null)   
      {   
      
      }   
    PropertyInfo[] propertys = new Form1().GetType().GetProperties();
                foreach (PropertyInfo PropertyInfo in propertys)
                {
                    
                }
                FieldInfo [] fieldinfos = new Form1().GetType().GetFields();
                foreach (FieldInfo fieldinfo in fieldinfos)
                {
                   
                }
                MemberInfo[] MemberInfos = new Form1().GetType().GetMembers();
                foreach (MemberInfo  MemberInfo in MemberInfos)
                {
                   
                }
                MethodInfo[] methods = new Form1().GetType().GetMethods();
                foreach (MethodInfo method in methods)
                {
                    
                }
      

  3.   

    Process p = Process.CurrentProcess(); 
    string asmName = p.ProcessName + ".exe";application 有个属性。比你上面的简单。
      

  4.   


    由于不传递this  现在我不知道怎么取得Object呀,这个就是问题点呀