There can be no Triumph without Loss,No Victory without Suffering,No Freedom without Sacrifice.
All you have to decide is what to do with the time that is given to you.
Get busy Living, or Get busy Dying?
  首页 | 留言给我 | 订阅 Rss | CLI | 黄白之恋 Posts:158   Hits: 2066475    Comments: 170    
 日历归档
<<  <  2020 - 04  >  >>
SuMoTuWeThFrSa
   1234
567891011
12131415161718
19202122232425
2627282930
 About Me
 Name: ZhangSichu
 Sex: Male
 Age: 32
 Email: ZhangSichu@gmail.com
 MSN: ZhangSichu@hotmail.com
 Home: ZhangSichu.com
 WeiBo: weibo.com/zhangsichu
 个人推荐
 分类归档
  ·C++/C(5)  RSS
  ·软件工程(1)  RSS
  ·杂事/随感(26)  RSS
  ·.Net/Java(30)  RSS
  ·面向对象程序设计(5)  RSS
  ·汇编/破解(0)  RSS
  ·平面设计(3)  RSS
  ·SQL(5)  RSS
  ·COM/COM+(2)  RSS
  ·Web开发(81)  RSS
 My Friends
Back Forward Refresh Home 2020年4月5日 星期日 RSS CLI Mine Sweeper. In Javascript.

  C#下界面设计初探
字体大小 [ ]

对程序的设计分析可以面向对象,对界面的设计可以面向设计吗?.Net Web设计有一个.UI可以专门来设计 Asp.Net的界面。.Net界面的设计和操作分离可以很方便的实现。自学了.Net下的面向对象设计,用C#来实现.Net下的界面的设计和操作的分离。最近和同学合作,作了一个社区的管理程序,要求界面模仿Windows优化大师,要求界面简单易用功能分类清晰。下面是设计好的界面:

上部横条大类导航 左边是大类下的小类:

Click to Open in New Window

Click to Open in New Window

要求大类点一下,小类中的按钮就要改换一下,换到这个大类操作下的小类。在原来还没有学过面向对象界面设计的时候就把所有的小类都放在主Form的。当大类被点击了,置小类的Visible=true; Visible=false;如果这样写的话,在只有几个按钮的情况下很好处理,不过当按钮一多起来就很难控制了。

下面是根据面向对象的思想,拆分各个窗体。每个左边的菜单都是一个Form,它被嵌入到了主Form里,各个Form 进行自己的操作。

Click to Open in New Window

Click to Open in New Window

MainForm Load 函数

    private void MainForm_Load(object sender, System.EventArgs e)
    {
      transferForm += new TransferForm(this.InitialForm);
      transferForm += new TransferForm(this.ShowFormMain);

      baseInstance = new BaseInstance();
      InitialForm(baseInstance);
      sideBase = new SideBase(transferForm);
      InitialForm(sideBase);
      sideRoutine = new SideRoutine(transferForm);
      InitialForm(sideRoutine);
      sideService = new SideService(transferForm);
      InitialForm(sideService);
      sidePeople = new SidePeople(transferForm);
      InitialForm(sidePeople);
      sideParty = new SideParty(transferForm);
      InitialForm(sideParty);
      sideComplex = new SideComplex(transferForm);
      InitialForm(sideComplex);
      sideProtect = new SideProtect(transferForm);
      InitialForm(sideProtect);

      lastSideForm=sideBase;
      ShowFormSide(sideBase);
      lastMainForm=baseInstance;
      ShowFormMain(baseInstance);

    }

初始化嵌套的要显示的窗体

    public void InitialForm(Form showForm)
    {
      showForm.Location = new Point(0,0);
      showForm.TopLevel = false;
      showForm.TopMost = false;
      showForm.ControlBox = false;
      showForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
      showForm.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
    }

显示左边的导航窗体

    private void ShowFormSide(Form showForm)
    {
      //showForm.Size = this.panelSide.ClientSize;
      lastSideForm.Visible=false;
      lastSideForm = showForm;
      showForm.Parent=this.panelSide;
      showForm.Visible =true;
    }

显示右边的窗体
    public void ShowFormMain(Form showForm)
    {
      //showForm.Size = this.panelMain.ClientSize;
      lastMainForm.Visible=false;
      lastMainForm = showForm;
      showForm.Parent=this.panelMain;
      showForm.Visible =true;
    }

更换左边导航窗体
private void btService_Click(object sender, System.EventArgs e)
    {
      ShowFormSide(sideService);
    }

最终实现了各个窗体管理自己的按钮,给别的窗体留出通讯接口(这里是 transferForm 那个指代给Side类窗体传入两个函数)各司其职,互相留好通信接口。功能和界面分离,管理方便。

执行程序(需要.Net1.1运行时环境)

File: Click to Download



  Posted @ 2/27/2005 10:49:36 PM | Hits (78405) | Comments (17

  Comment
 #re:C#下界面设计初探  9/22/2012 10:41:35 PM  revin
写的界面不错,看到作者你的原来源码也没有了,估计也要不到源码了,从下午搞到现在终于反编译整理好了源码,一切正常,才发现主界面的那个竟然是个大图。。还得需要PS 哎。。。不过。感谢楼主。
 #re:C#下界面设计初探  4/17/2011 1:59:07 PM  dd
能把你的界面源码发给我吗?我想做一个类似界面的程序~~
hawkingye@126.com
 #re:C#下界面设计初探  4/7/2011 9:57:53 PM  tianer
楼主好,我也是菜鸟,看到楼主的杰作十分羡慕,希望能得到楼主的源代码,不胜感激,谢谢了!mytianer@163.com
 #re:C#下界面设计初探  11/8/2010 3:10:57 PM  晴天
能不能发个源代码,初学者,需要学习,有类似的工作,谢谢,liuyanxia123456sad@126.com,非常感谢。
 #re:C#下界面设计初探  8/25/2010 11:20:38 AM  zhangsichu
下载链接 已经放在本文最下面了。
 #re:C#下界面设计初探  8/17/2010 2:24:24 PM  lqx
能不能发一个?
188304245@qq.com
 #re:C#下界面设计初探  4/1/2010 5:12:58 PM  luckjelly
能不能发一个学习一下,luckjelly@yahoo.com.cn
 #re:C#下界面设计初探  3/20/2010 11:36:59 PM  chang_da@zju.edu.cn
很漂亮
 #re:C#下界面设计初探  1/20/2010 11:53:45 AM  lin
能发我一份源码吗?谢谢!linofficewhl@163.com
 #re:C#下界面设计初探  6/8/2009 7:50:51 PM  Jayn
可以给我发一份这个的原代码吗?
邮箱:caojiayin1984@126.com

谢谢。
 #re:C#下界面设计初探  5/26/2009 9:25:41 AM  zhangsichu
不好意思,很抱歉,机器重装了几次,源代码已经找不到了。
 #re:C#下界面设计初探  5/26/2009 8:55:12 AM  flyaway
我也想要,我要做个类似界面的动向,能吧源程序给我吗?谢谢拉!flyaway1502@163.com
 #re:C#下界面设计初探  12/25/2008 11:20:28 PM  破风雷
在使用Visual Studio 2005 开发Windows程序的时候,需要在容器控件中显示一个新的Form,直接使用如下代码出现异常无法将顶级控件添加到控件:
MyForm myForm = new MyForm();
container.Controls.Add(myForm);
网上查阅了相关资料,解决方法很简单。由于Form默认为顶级控件,所以在容器控件中加入会出现标题所示异常。
只要在添加控件的代码之前将Form设置为非顶级控件即可解决错误。
MyForm myForm = new MyForm();
myForm.TopLevel = false;
container.Controls.Add(myForm);
 #re:C#下界面设计初探  5/14/2005 6:40:47 PM  Hello
Csharp下怎样手工发送消息??
 #re:求教  5/13/2005 10:57:45 AM  ZhangSichu
showForm.Location = new Point(0,0);
showForm.TopLevel = false;
showForm.TopMost = false;
showForm.ControlBox = false;
showForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
showForm.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
showForm.Parent=this.panelSide;
showForm.Visible =true;
你再试试
 #re:C#下界面设计初探  5/12/2005 1:27:50 PM  求教
怎么能把一个Form的Parent赋予一个pannal呢?
showForm.Parent=this.panelMain;
Form是顶级控件呀,我为什么这样做就会有运行错误呢?
 #re:C#下界面设计初探  5/11/2005 7:10:12 PM  淡如云烟
你好:
刚接触C#,
能把你做界面的源程序,借来看看吗?
clbfr@163.com
谢谢!!!
  Post Comment
标题 *
作者 *
密码 记住我
评论 *
    


Stable in Firefox 1.5 2.0Stable in IE6 IE7Stable in MozillaStable in Netscape
ZhangSichu.com V0.1.7507
Powered By ZhangSichu
Copyright © ZhangSichu
Download ZhangSichu.com source code. Download source code