都要哭了,.NET一个简单问题咋那么困难。
使用单列反射获得打开的窗体类。网上代码一大堆,都是打开窗体,获取窗体类。
我想要的是反射获取打开的窗体类,请各位给个链接吧。实在搜不到 --------------------编程问答-------------------- 因为你什么都不会,所以觉得什么问题都难。 --------------------编程问答-------------------- 反射获取打开窗体的类?是获取运行状态下窗体的类吗?
反射可以获取dll里的类、属性、方法等,但是你这个跟反射有什么关系么? --------------------编程问答-------------------- var form=Assembly.Load(程序集).CreateInstance(类) as Form ;
form.Show(); --------------------编程问答-------------------- /// <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.}
--------------------编程问答-------------------- 好难的反射。。 --------------------编程问答-------------------- +1 --------------------编程问答--------------------
应用倒查询,找到进程,然后获取窗体句柄,然后算出窗体类 --------------------编程问答-------------------- 反射是这样:
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;
}
你要干嘛用,看起来没什么意义啊 --------------------编程问答-------------------- 转行吧! 菜鸟 退出吧 菜鸟 退出有肉吃。 --------------------编程问答-------------------- 我连你的需求都看不懂,更别说解决方案了 --------------------编程问答--------------------
获取打开的窗体的类
和打开一个窗体获取这个窗体的类
这2个东西的区别。 --------------------编程问答-------------------- --------------------编程问答--------------------
明白你的意思了,你这个需求跟反射没有一点关系,得用windows API来查找窗体
引用8楼代码
int hWnd = FindWindow(null, "FormTest"); --------------------编程问答-------------------- foreach (Form f in Application.OpenForms)
{
MessageBox.Show(f.Name);
} --------------------编程问答-------------------- 路过,祝福早日解决问题吧。 --------------------编程问答-------------------- 反射要么实例,要么赋值,要么调用方法,你来个反射获取已创建的实例??
你不会定义个全局变量来放置所以已经实例化的窗体,反而要用反射来做不是它应该做的事情,你让反射情何以堪
有问题不要总怪方法不对,而应该想想你的思路对不对 --------------------编程问答-------------------- 可以用全局的Application.Forms --------------------编程问答-------------------- 进来涨姿势 看大神指教
补充:.NET技术 , C#