C#关于界面切换问题

我平时做界面切换时是在同一个form里用panel来放入控件来进行界面切换的但是当所需界面很多时就form就显得很乱我现在是想将所需要的多个界面分成多个子窗体,当点击按钮... 我平时做界面切换时是在同一个form里用panel来放入控件来进行界面切换的 但是当所需界面很多时就form就显得很乱 我现在是想将所需要的多个界面分成多个子窗体,当点击按钮时,子窗体就会嵌入到主窗体中,这应该要怎么做???
跪求!
展开
 我来答
子丶夜
2014-06-09 · TA获得超过397个赞
知道小有建树答主
回答量:326
采纳率:25%
帮助的人:219万
展开全部

给你代码,这是我做的:

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();

            }

        }

尔偶一下
2014-06-09 · 超过84用户采纳过TA的回答
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:160万
展开全部
给你提供几个我测试的函数,你可以测试下。
在你的主窗体中添加以下自定义函数
/// <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解释下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CoCo_Melon_
2014-06-09 · TA获得超过1207个赞
知道答主
回答量:38
采纳率:0%
帮助的人:18.4万
展开全部
为什么不用选项卡控件?
更多追问追答
追问
怎么用?
追答
在工具箱里面的容器,TabControl控件就是。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式