zoukankan      html  css  js  c++  java
  • C# windows窗口应用程序切换主界面的显示内容

    不知道说清楚没有?
    就是我的窗口分为两部分,
    左边,控制部分,由一些按钮组成
    右边,显示部分,由些控件(如下拉,文本等等组成)

    左边的每个按钮对应显示部分的页面,也就是说,左边换一个按钮点,那么右边就显示其相应的内容.
    比如,左边有3个按钮,分别 进货,出货,库存
    点进货,右边出现进货的页面,
    点出货,右边出现出货页面,

    请问应该如何实现页面切换控制,我朋友告诉我,把3个页面做成3个重叠的页面,然后控制他们好显示与隐藏来达到目的,但我觉得不太好,感觉 有点乱.

    我觉得可不可以把每个Panel写成相应的对象,每次点的时候销毁其他,然后再生成一个,但是不知道怎么写?是不是用用户自定义控件


    这里不用tabcontrol,MDI也不用,就是几个页面换的方法,
    其实我主要是想要动态加载,因为页面有点多,如果用 tabcontrol,不太好,我刚才说进销存,只是个例子,如果要实现动态加载怎么用,或者用用户控件怎么用?????????谢谢大家

    或者有没有更好的方法?请大家指点

    可以在左边固定的界面使用委托,初始化让左边窗体全部显示为(0,0),默认的为最大显示.然后点击左边窗体的时候,初始化右边的窗体,同样是让右边的窗体显示在固定的位置.例子如下:
    public void showSideForm(Form form)
    {
    this.lastSideForm.Visible = false;//上一个窗体,最初默认是显示的窗体
    this.lastSideForm = form;
    this.lastSideForm.Visible = true;
    form.Parent = this.pSide;//pSide为左边固定框的panel
    }
    public void showMainForm(Form form)
    {
    this.lastMainForm.Visible = false;//上一个窗体,最初默认是显示的主窗体
    this.lastMainForm = form;
    form.Parent = this.pMain;//pMain为主窗体的panel
    form.Visible = true;
    }
    public void InitialForm(Form form)
    {
    form.Location = new Point(0,0);
    form.TopLevel = false;
    form.TopMost = false;
    form.StartPosition = FromStartPosition.Manual;
    }

    然后在form1_Load中加入一个委托,将所有在左边显示的窗体全部InitialForm;
    声明一个委托delegate d(Form form)类,每一个左边窗体声明对象时new一个参数d,
    动态显示窗口。
    定义窗口变量,不同的按钮,创建不同的窗口变量来显示。指定父窗口是同一个容器控件。
    继续追问:
    请进一步告诉我下,如何定义动态窗口?请问窗口会弹出来吗?我的不要他弹出来,要嵌在页面中
    补充回答: 你说的到底是C# WindowForm,还是C# WebForm?
    继续追问:
    WindowForm
    要嵌在主窗口中
    补充回答:
    右边放一个容器类控件,比如Panel。
    指定动态的窗口变量的父窗口为Panel 。
    补充回答: 朋友,我说的还不够清楚?
    继续追问:
    左边放了按钮
    右边放了个PANEL
    现在我不清楚的是右边是一个页面对应一个PANEL,还是所有页面都用一个PANEL
    继续追问:
    我知道了,就是写出几个继承窗口,然后是父类是右边那个PANEL,这样窗口就不会弹出来?这样只要每个按钮指定一个窗口!就可以控制了!
    继续追问: 是这样吗?
    补充回答: 是所有页面共用一个Panel 。
    补充回答: 不妨一试。
    继续追问: 那问题是,如果出来一个页面,我点了另一个按钮,这个时候出来另一个页面,刚才出来的需要销毁吗?如果要销毁,怎么销毁
    补充回答: 不需要销毁啊。
    楼主看看这张图片,是不是你想要的效果。

    补充回答: 做个简单的说明,左边是一个可以收展的导航,上面是功能按钮
    右边部分是对应功能块,不允许同名窗口多次打开
    采用的是多文档
    还有疑问,请追问
    继续追问:
    恩,有点像,但是我右边的窗口不能动,而且一次只能出来一个穿口
    补充回答: 不能动更简单,load的时候窗体显示为最大化,同时设置最大化属性为false
    但是必须在每个窗口上添加关闭按钮,可以理解嘛
    补充回答: 当然你也可用通过设置 WindowState 为 Maximized
    继续追问:
    恩,明白了很多,
    问题是如果我重新点另一按钮,怎么销毁以前打开的呢?还有就是那个标题烂如何去掉,我想让他看起来就是一个整体,而不是其中的一个窗口
    继续追问: 窗口有点多,而且有点复杂,如何设置了不能重复打开,打开一个,关闭另一个的时候如何销毁前面一个?
    补充回答: 我说的是不允许同名窗口多次打开!!!
    比如说已经新建了一个管理 客服信息的窗体就不能在未关闭这个窗体之前打开另一个管理 客服信息的窗体,但是可以打开其他不同名的窗体
    补充回答: 至于去掉子窗体标题栏可以:
    设置这两个属性
    this.ControlBox = false;
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    添加下面的事件就可以了
    private void Form_Resize(object sender, EventArgs e)
    {
    if (this.WindowState == FormWindowState.Maximized)
    {
    this.FormBorderStyle = FormBorderStyle.None;
    }
    else
    {
    this.FormBorderStyle = FormBorderStyle.Sizable;
    }

    }
    补充回答: 当然在这里
    else
    {
    this.FormBorderStyle = FormBorderStyle.Sizable;
    }
    是多余的

  • 相关阅读:
    OpenCV---在图片上加入文字
    DosBox 报错 this program requires dosxnt.exe to be in your path
    iOS开发-UITableView单选多选/复选实现1
    LeetCode第七题,Reverse Integer
    【PostgreSQL】PostgreSQL操作-psql基本命令
    Bootstrap的js插件之弹出框(popover)
    Qt Quick 图像处理实例之美图秀秀(附源代码下载)
    【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
    用Visual Studio高版本号打开低版本号的project,转换时出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    如何安装ArchLinux
  • 原文地址:https://www.cnblogs.com/blogpro/p/11459887.html
Copyright © 2011-2022 走看看