当前位置:编程学习 > C#/ASP.NET >>

都要哭了,.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 楼 wddw1986 的回复:
因为你什么都不会,所以觉得什么问题都难。
+1 --------------------编程问答--------------------
引用 楼主 ah_2056 的回复:
使用单列反射获得打开的窗体类。
网上代码一大堆,都是打开窗体,获取窗体类。

我想要的是反射获取打开的窗体类,请各位给个链接吧。实在搜不到


应用倒查询,找到进程,然后获取窗体句柄,然后算出窗体类 --------------------编程问答-------------------- 反射是这样:

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;
}

你要干嘛用,看起来没什么意义啊 --------------------编程问答--------------------   转行吧!  菜鸟   退出吧   菜鸟  退出有肉吃。 --------------------编程问答-------------------- 我连你的需求都看不懂,更别说解决方案了 --------------------编程问答--------------------
引用 10 楼 zj_zwl 的回复:
我连你的需求都看不懂,更别说解决方案了


获取打开的窗体的类
和打开一个窗体获取这个窗体的类
这2个东西的区别。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 11 楼 ah_2056 的回复:
Quote: 引用 10 楼 zj_zwl 的回复:

我连你的需求都看不懂,更别说解决方案了


获取打开的窗体的类
和打开一个窗体获取这个窗体的类
这2个东西的区别。


明白你的意思了,你这个需求跟反射没有一点关系,得用windows API来查找窗体
引用8楼代码
int hWnd = FindWindow(null, "FormTest"); --------------------编程问答-------------------- foreach (Form f in Application.OpenForms)
{
    MessageBox.Show(f.Name);
} --------------------编程问答-------------------- 路过,祝福早日解决问题吧。 --------------------编程问答-------------------- 反射要么实例,要么赋值,要么调用方法,你来个反射获取已创建的实例??
你不会定义个全局变量来放置所以已经实例化的窗体,反而要用反射来做不是它应该做的事情,你让反射情何以堪

有问题不要总怪方法不对,而应该想想你的思路对不对 --------------------编程问答-------------------- 可以用全局的Application.Forms --------------------编程问答-------------------- 进来涨姿势 看大神指教
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,