我用的是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)
{
......
}
} 关于这个问题,我也发了好几次贴 多发几分 众人拾柴火焰高嘛 *_*
// 注意我要把这个功能独立出来写成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)
{
......
}
} 关于这个问题,我也发了好几次贴 多发几分 众人拾柴火焰高嘛 *_*
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)
{
}
string asmName = p.ProcessName + ".exe";application 有个属性。比你上面的简单。
由于不传递this 现在我不知道怎么取得Object呀,这个就是问题点呀