C#关于界面切换问题
跪求! 展开
给你代码,这是我做的:
private void btnNewButtonEvent(object sender, EventArgs e)
{
ShowForm(sender as NewPictureBox);
}
private void ShowForm(NewPictureBox sender)
{
try
{
this.pan_DAccount.Visible = false;
this.Cursor = Cursors.WaitCursor;
Type t = SetUI(sender.ShowFormName);
if (t == null)
{
return;
}
Form f = (Form)Activator.CreateInstance(t, true);
if (f != null)
{
NewMethod(f);
}
}
catch (Exception ex)
{
}
finally
{
this.Cursor = Cursors.Default;
}
}
public Type SetUI(string uiName)
{
try
{
Assembly assmbly = Assembly.LoadFrom("TengePay.exe");
Type type = assmbly.GetType("TengePay." + uiName);
return type;
}
catch (Exception ex)
{
throw ex;
}
}
public void NewMethod(Form frmp)
{
bool isOpen = true;
foreach (Form frm in this.MdiChildren)//遍历已打开的MDI
{
if (frm.Name == frmp.Name)
{
frm.Activate();//赋予焦点
frm.WindowState = FormWindowState.Normal;//设置窗体最大化
isOpen = false;
break;
}
this.BeginInvoke(new ColseFormHander(delegate()
{
if (frm.Name != this.Name)
frm.Close();
}));
}
if (frmp.Name == this.Name)
{
this.Dispose();
return;
}
if (!isOpen)//如果没有找到相同窗体则打开新窗体
{
return;
}
if (frmp.Tag != null && frmp.Tag.ToString() == "No")
{
this.BeginInvoke(new EventerFromDelegate(delegate
{
frmp.Dock = DockStyle.Fill;
(frmp as BaseForm).ResultPrentForm = this;
frmp.ShowDialog();
}));
}
else
{
frmp.MdiParent = this;
frmp.Dock = DockStyle.Fill;
frmp.Show();
frmp.Activate();
}
}
在你的主窗体中添加以下自定义函数
/// <summary>
/// 同一类型的子窗口只打开一个
/// </summary>
private bool ShowChildrenForm(Type p_frmType)
{
Form t_frm = FindChildForm(p_frmType);
if (t_frm == null)
return false;
//让子窗口获得焦点
t_frm.Activate();
return true;
}
/// <summary>
/// 查找子窗口
/// </summary>
public Form FindChildForm(Type p_frmType)
{
foreach (Form c_frm in this.MdiChildren)
{
if (c_frm.GetType() == p_frmType)
return c_frm;
}
return null;
}
当你要触发某个窗体在主窗体中展示时,这样调用
WinListenForm这里为我的要显示的窗体。
if (!ShowChildrenForm(typeof(WinListenForm)))
{
WinListenForm t_frm = new WinListenForm();
t_frm.MdiParent = this;
t_frm.Show();
}
求采纳。打字不易
我新手 看得不是很明白 能将源程序上传么??
源码不可以。我的记载了很多。只能给你部分的。你测试应该可以通过的。
上面的源码,只是改变了窗体弹出的位置,默认方式是弹出一个新的窗口,我的这个方式是吧弹出的窗口显示在主窗口中。
代码哪里不明白的我可以给你i解释下
怎么用?
在工具箱里面的容器,TabControl控件就是。