VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 829|回复: 5

动态调用窗体方法请教。

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-17 18:30:01 | 显示全部楼层 |阅读模式
一个主窗体和N个子窗体
主窗体通过调用子窗体的 shwo子窗体名() 方法来打开子窗体,但是主窗体有很多菜单项,每次调用的代码都几乎相同,看能不能精简一下。我先给出我的代码:

主窗口调用代码(几乎每个调用都是这么写的):
//权限设置
                private void MSys_Power_Click(object sender, System.EventArgs e)
                {
                        Form frm = null;
                        for (int i = 0; i < this.MdiChildren.Length; i++)
                        {
                                if (this.MdiChildren[i].Name == "RolePowerManage")
                                {
                                        frm = this.MdiChildren[i];
                                        break;
                                }
                        }
                        if (frm == null)
                        {
                                this.stBarMain.Panels[0].Text = "正在加载权限设置窗体...";
                                this.Refresh();
                                SystemSet.RolePowerManage.ShowRolePowerManage(this);
                                this.stBarMain.Panels[0].Text = "就绪";
                        }
                        else
                        {
                                frm.BringToFront();
                                frm.Activate();
                        }
                }
子窗口ShowRolePowerManage()方法:
public static void ShowRolePowerManage(Form FName)
                {
                        Form frmTip = LoadTip.ShowTipForm(FName,"正在加载窗体...");
                        RolePowerManage frm = new RolePowerManage();
                        frm.MdiParent = FName ;
                        frm.Show();
                        frmTip.Close();
                }
子窗口显示的方法我都是:show+窗口名

我在想,能不能把主窗口调用的代码写成一个方法,我知道要用反射,可惜学艺不精,请高手帮忙
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-19 21:45:01 | 显示全部楼层
反射会让效率降低,尽量不要采用
回复

使用道具 举报

0

主题

26

帖子

21.00

积分

新手上路

Rank: 1

积分
21.00
发表于 2020-6-22 17:30:02 | 显示全部楼层
Type type = Type.GetType("窗体的完整类名(MyNameSpace.MyForm)");
// 创建窗体实例                               
Object obj = type.InvokeMember(null,
        BindingFlags.Public | BindingFlags.NonPublic |
        BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null);
// 显示窗体
type.InvokeMember("Show",System.Reflection.BindingFlags.InvokeMethod,null,obj,null);
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-23 17:30:02 | 显示全部楼层
可以尝试用公共类
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-7-23 16:15:01 | 显示全部楼层
Type type = Type.GetType("窗体的完整类名(MyNameSpace.MyForm)");
Form objFrm = System.Activator.CreateInstance(type);
objFrm.show();

反射
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-7-31 12:15:02 | 显示全部楼层
不好意思,发错了。

btx221 这位的办法不错!!
回复

使用道具 举报

0

主题

8

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-7-31 12:30:01 | 显示全部楼层
不好意思,发错了。

btx221 这位的办法不错!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表