private void button3_Click(object sender, EventArgs e)
{
//获取单击的Button名称
string btnname = ((Button)sender).Name;
if (btnname == "button1")
{
//处理窗体
}
else if (btnname == "button2")
{
//处理窗体
}
else
{
//处理窗体
}
}
/// <summary>
/// 打开新的子窗体
/// </summary>
/// <param name="strName">窗体的类名</param>
/// <param name="AssemblyName">窗体所在类库的名称</param>
public static void CreateForm(string strName, string AssemblyName)
{
string path = AssemblyName;//项目的Assembly选项名称
string name = strName; //类的名字
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc.Show();
}
private void button1_Click(object sender, EventArgs e)
{
//获取单击的Button名称
string btnname = ((Button)sender).Text;
CreateForm("WindowsFormsApplication1." + btnname, "WindowsFormsApplication1");
}
/// <summary>
/// 打开新的子窗体
/// </summary>
/// <param name="strName">窗体的类名</param>
/// <param name="AssemblyName">窗体所在类库的名称</param>
/// <param name="MdiParentForm">父窗体</param>
public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm)
{
int Index = strName.LastIndexOf(".");
string FormName = strName.Substring(23);
if (!ShowChildForm(FormName, MdiParentForm))
{
string path = AssemblyName;//项目的Assembly选项名称
string name = strName; //类的名字
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc.WindowState = FormWindowState.Maximized;
doc.MdiParent = MdiParentForm;
doc.Show();
}
}
/// <summary>
/// 防止子窗体再度打开
/// </summary>
/// <param name="p_ChildrenFormText"></param>
/// <param name="MdiParentForm"></param>
/// <returns></returns>
public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm)
{
int i;
//依次检测当前窗体的子窗体
for (i = 0; i < MdiParentForm.MdiChildren.Length; i++)
{
//判断当前子窗体的Text属性值是否与传入的字符串值相同
if (MdiParentForm.MdiChildren.Name == p_ChildrenFormText)
{
//如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值
MdiParentForm.MdiChildren.Activate();
return true;
}
}
//如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值
return false;
}
chenwu0815 发表于 2013-7-14 22:54
之前写了一个权限动态加载菜单,但是点击后,不能打开对应的FORM,还是手工添加的打开对应FORM的程序,明天 ...
站长苏飞 发表于 2013-7-15 08:11
我一直是这么用的,你要吧试试,应该没有问题,如有什么问题可以发帖子
chenwu0815 发表于 2013-7-15 12:06
已经测试OK。。通过查询数据库中的权限对应的Form名称,直接打开对应Form。。感谢
chenwu0815 发表于 2013-8-19 11:52
现在在考虑传值的问题,需要将user的几个值传到打开后的FORM。。。
站长苏飞 发表于 2013-8-19 12:47
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc就是窗体对象,直接调用里面的变量赋 ...
站长苏飞 发表于 2013-8-19 12:47
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc就是窗体对象,直接调用里面的变量赋 ...
chenwu0815 发表于 2013-8-20 14:37
那我需要怎么修改程序来实现类似的传值呢?
chenwu0815 发表于 2013-8-20 14:37
那我需要怎么修改程序来实现类似的传值呢?
站长苏飞 发表于 2013-8-20 15:27
Complaint()这应该是你的构造方法吧,你之前是通过构造方法来传值的,现在不要通过这个来传值就行了,
...
chenwu0815 发表于 2013-8-20 15:41
之前子窗体就用通过如下来获取的。
public Complaint(string username, string name, string branch, ...
站长苏飞 发表于 2013-8-20 16:13
把这个提取成一个Public方法就行了,安我楼上说的去做,
还有就是可以看楼上的文章直接通过反射处理
chenwu0815 发表于 2013-8-21 11:12
private void GetUserInfo()
{
Assembly assembly = Assembly.Load("Improvemen ...
站长苏飞 发表于 2013-8-21 11:16
Public方法定义在子窗体,在主窗体得到对象之后直接调用就行了,就是一个方法,
类名.方法名
这样调用 ...
chenwu0815 发表于 2013-8-21 13:23
我想的是,从权限管理、动态实例化窗体,到窗体传值这一系列弄个完整方案。。
目前结合你的“动态实例化 ...
/// <summary>
/// 打开新的子窗体
/// </summary>
/// <param name="strName">窗体的类名</param>
/// <param name="AssemblyName">窗体所在类库的名称</param>
/// <param name="MdiParentForm">父窗体</param>
public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm)
{
int Index = strName.LastIndexOf(".");
string FormName = strName.Substring(23);
if (!ShowChildForm(FormName, MdiParentForm))
{
string path = AssemblyName;//项目的Assembly选项名称
string name = strName; //类的名字
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc.WindowState = FormWindowState.Maximized;
doc.MdiParent = MdiParentForm;
doc.Show();
}
}
/// <summary>
/// 防止子窗体再度打开
/// </summary>
/// <param name="p_ChildrenFormText"></param>
/// <param name="MdiParentForm"></param>
/// <returns></returns>
public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm)
{
int i;
//依次检测当前窗体的子窗体
for (i = 0; i < MdiParentForm.MdiChildren.Length; i++)
{
//判断当前子窗体的Text属性值是否与传入的字符串值相同
if (MdiParentForm.MdiChildren.Name == p_ChildrenFormText)
{
//如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值
MdiParentForm.MdiChildren.Activate();
return true;
}
}
//如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值
return false;
}
/// <summary>
/// 打开新的子窗体
/// </summary>
/// <param name="strName">窗体的类名</param>
/// <param name="AssemblyName">窗体所在类库的名称</param>
/// <param name="MdiParentForm">父窗体</param>
public static void CreateForm(string strName, string AssemblyName, Form MdiParentForm)
{
int Index = strName.LastIndexOf(".") + 1;
string FormName = strName.Substring(Index, strName.Length - Index);
if (!ShowChildForm(FormName, MdiParentForm))
{
string path = AssemblyName;//项目的Assembly选项名称
string name = strName; //类的名字
Form doc = (Form)Assembly.Load(path).CreateInstance(name);
doc.WindowState = FormWindowState.Maximized;
doc.MdiParent = MdiParentForm;
doc.Show();
}
}
/// <summary>
/// 防止子窗体再度打开
/// </summary>
/// <param name="p_ChildrenFormText"></param>
/// <param name="MdiParentForm"></param>
/// <returns></returns>
public static bool ShowChildForm(string p_ChildrenFormText, Form MdiParentForm)
{
int i;
//依次检测当前窗体的子窗体
for (i = 0; i < MdiParentForm.MdiChildren.Length; i++)
{
//判断当前子窗体的Text属性值是否与传入的字符串值相同
if (MdiParentForm.MdiChildren.Name == p_ChildrenFormText)
{
//如果值相同则表示此子窗体为想要调用的子窗体,激活此子窗体并返回true值
//MdiParentForm.MdiChildren.Visible = true;
MdiParentForm.MdiChildren.Activate();
return true;
}
}
//如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值
return false;
}
欢迎光临 苏飞论坛 (http://www.sufeinet.com/) | Powered by Discuz! X3.4 |