都要哭了,.NET一个简单问题咋那么困难。

ah_2056 2013-12-04 11:00:06
使用单列反射获得打开的窗体类。
网上代码一大堆,都是打开窗体,获取窗体类。

我想要的是反射获取打开的窗体类,请各位给个链接吧。实在搜不到
...全文
726 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫九 2013-12-05
  • 打赏
  • 举报
回复
进来涨姿势 看大神指教
jqncc 2013-12-05
  • 打赏
  • 举报
回复
可以用全局的Application.Forms
  • 打赏
  • 举报
回复
反射要么实例,要么赋值,要么调用方法,你来个反射获取已创建的实例?? 你不会定义个全局变量来放置所以已经实例化的窗体,反而要用反射来做不是它应该做的事情,你让反射情何以堪 有问题不要总怪方法不对,而应该想想你的思路对不对
bu_ge 2013-12-04
  • 打赏
  • 举报
回复
反射是这样:

var cTmp = Type.GetType("published.class");
Form c = Activator.CreateInstance(cTmp) as Form;
你要得到已开启的窗体,调用API:

[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(string lpClassName, string
            lpWindowName);

private void button2_Click(object sender, EventArgs e)
{
    int hWnd = FindWindow(null, "FormTest");
    var frm = (Control)Form.FromHandle(new IntPtr(hWnd));
    (frm as FormTest).BackColor = Color.Red;
}
你要干嘛用,看起来没什么意义啊
北京大白兔 2013-12-04
  • 打赏
  • 举报
回复
引用 楼主 ah_2056 的回复:
使用单列反射获得打开的窗体类。 网上代码一大堆,都是打开窗体,获取窗体类。 我想要的是反射获取打开的窗体类,请各位给个链接吧。实在搜不到
应用倒查询,找到进程,然后获取窗体句柄,然后算出窗体类
卧_槽 2013-12-04
  • 打赏
  • 举报
回复
引用 1 楼 wddw1986 的回复:
因为你什么都不会,所以觉得什么问题都难。
+1
水猿兵团五哥 2013-12-04
  • 打赏
  • 举报
回复
好难的反射。。
北京大白兔 2013-12-04
  • 打赏
  • 举报
回复
/// <summary> 2. /// /// <summary> 3. /// 反射操作打开子窗体 4. /// </summary> 5. /// </summary> 6. public class ReflectionHelper 7. { 8. /// <summary> 9. /// 打开新的子窗体 10. /// </summary> 11. /// <param name="strName">窗体的类名</param> 12. /// <param name="AssemblyName">窗体所在类库的名称</param> 13. /// <param name="MdiParentForm">父窗体</param> 14. public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm) 15. { 16. int Index = strName.LastIndexOf("."); 17. string FormName = strName.Substring(23); 18. if (!ShowChildForm(FormName, MdiParentForm)) 19. { 20. string path = AssemblyName;//项目的Assembly选项名称 21. string name = strName; //类的名字 22. Form doc = (Form)Assembly.Load(path).CreateInstance(name); 23. doc.WindowState = FormWindowState.Maximized; 24. doc.MdiParent = MdiParentForm; 25. doc.Show(); 26. } 27. } 28. 29. /// <summary> 30. /// 防止子窗体再度打开 31. /// </summary> 32. /// <param name="p_ChildrenFormText"></param> 33. /// <param name="MdiParentForm"></param> 34. /// <returns></returns> 35. public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm) 36. { 37. int i; 38. //依次检测当前窗体的子窗体 39. for (i = 0; i < MdiParentForm.MdiChildren.Length; i++) 40. { 41. //判断当前子窗体的Text属性值是否与传入的字符串值相同 42. if (MdiParentForm.MdiChildren[i].Name == p_ChildrenFormText) 43. { 44. //如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值 45. MdiParentForm.MdiChildren[i].Activate(); 46. return true; 47. } 48. } 49. //如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 50. return false; 51. } 52.}
五更琉璃 2013-12-04
  • 打赏
  • 举报
回复
var form=Assembly.Load(程序集).CreateInstance(类) as Form ; form.Show();
飞小猪 2013-12-04
  • 打赏
  • 举报
回复
反射获取打开窗体的类?是获取运行状态下窗体的类吗? 反射可以获取dll里的类、属性、方法等,但是你这个跟反射有什么关系么?
cheng2005 2013-12-04
  • 打赏
  • 举报
回复
因为你什么都不会,所以觉得什么问题都难。
threenewbee 2013-12-04
  • 打赏
  • 举报
回复
foreach (Form f in Application.OpenForms) { MessageBox.Show(f.Name); }
飞小猪 2013-12-04
  • 打赏
  • 举报
回复
引用 11 楼 ah_2056 的回复:
[quote=引用 10 楼 zj_zwl 的回复:] 我连你的需求都看不懂,更别说解决方案了
获取打开的窗体的类 和打开一个窗体获取这个窗体的类 这2个东西的区别。[/quote] 明白你的意思了,你这个需求跟反射没有一点关系,得用windows API来查找窗体 引用8楼代码 int hWnd = FindWindow(null, "FormTest");
ah_2056 2013-12-04
  • 打赏
  • 举报
回复
引用 10 楼 zj_zwl 的回复:
我连你的需求都看不懂,更别说解决方案了
获取打开的窗体的类 和打开一个窗体获取这个窗体的类 这2个东西的区别。
zj_zwl 2013-12-04
  • 打赏
  • 举报
回复
我连你的需求都看不懂,更别说解决方案了
  • 打赏
  • 举报
回复
转行吧! 菜鸟 退出吧 菜鸟 退出有肉吃。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧