绝想首页

C#做界面(一)

李兰辉 [深情] 2013-04-09 04:23:03 星期二 晴天 查看:1230 回复:1 发消息给作者

 

这两天被leader安排调查医疗软件上市所需手续­——也不失为一种锻炼,可惜整整查了两天,还没有达到令leader满意的程度,自然就没有时间再去啃Flex,杯具啊~

没米下锅,只好把以前做的一些勉强算是项目吧,拿出来回顾一下得失。

做的东西里最主要的就是某XXXX软件,软件的主要功能是读取DICOM文件(电子医学图像,大家熟悉的胸片等东东的电子文件),并做基本的显示和管理。

先说界面设计,按照leader要求,做成了动态界面,其实就是开一个空的Form当做最底下的“盘子”,然后自己再做出大量的自定义组件,然后一层层的“摞”到“盘子”上。

因为要求界面上的某些“部件”可以随意地“拿掉”和“恢复”,所以这些组件都在某个专门控制界面的类里定义好了,当时还不了解设计模式的知识,就都用的静态类,这是一种很不好的做法,因为用静态类的后果就是无论有没有用到它,它都会占用内存,这可以用设计模式里的singleton解决,所谓的singleton就是在创建某个实体类的时候,如果这个类已经存在,就返回这个类,如果这个类不存在,就创建,这样可以保证永远只能有最多一个类可用,从而避免浪费和混

除此之外,搭建界面基本就是拼组件,设属性,不难,但很,加上仿佛无穷无尽的各式各样的弹出窗口(居然还为打印画了弹出窗口,其实C#里自带了,真是很不好意思的说),用了两个周才做完。

不过当时留下了两个问题没有解决,一个是要求工具栏能够浮动得弹出和缩回,同时不影响其他部分,我利用C#界面里组件重叠的特点做出了这样的效果,可是在后续开发上就带来一些不便,这一点一直没有得到解决。第二个就是仓促之下没有使用spliter控件做出可拖动改变大小的分栏效果,后来抽出一天时间把整个界面的叠加方式和所有动作都重写了一遍,当时这套软件已经有大量的功能实现,数据层和应用层都在调试,但是修改界面排版对其他部分没有造成任何影响,果然把表示层和应用层剥离开是程序员的福音啊~

除了这些,还有个问题就是如何使用自定义组件。有一个部分要求实现打印,看了一些打印功能的实现,发现实际上就是先把要打印的东西按照排版绘制出来,然后丢给C#的相关函数(天啊,不说排版,单无数种字体就可以否决这条路了),最后是根据某达人的实例拓展C#richtextbox组件,做了一个自定义组件,然后是打成DLLC#DLL和生成exe差不多,更改一下设置就行),然后由项目调用,leader看了后说,这样太麻烦,因为要手动搬动DLL文件,可以把那个自定义组件的项目添加到solution里面,然后由要调用它的项目去引用这个项目(每个项目都有一个reference文件夹,右键添加已有即可)。这样的话自定义组件就可以像工具栏里的组件一样直接被拖进来了。

另外有个很诡异的事件,纯粹是C#自己搞出来的幺蛾子,大家知道windows桌面最底下那条蓝色(嗯,主流的都是蓝色的)的任务栏有多么重要,多么令人感觉顺手和不可或缺。大家也知道C#Form组件有最大最小化按钮,最大化就可以铺满除了最下面的任务栏之外的整个桌面,然后这俩按钮可以通过属性设置屏蔽掉。大家还知道C#的这个Form组件可以有一种很牛XX的最大化属性,能够直接铺满整个屏幕。最后一件大家知道的就是,C#可以从一个FormNew一个Form并打开之。

现在,诡异的来了从FormANew一个FormB并打开之,然后:

1.FormB屏蔽掉最大最小化按钮。

2.设置最大化到铺满除了最下面的任务栏之外的整个桌面。

3.FormB的更改大小属性屏蔽掉(虽然没有了最大最小化,但是双击标题栏一样可以达到效果)。

尝试之后,我惊讶的发现要同时做到以上三点就好像要把旋转门的三个门同时关上!因为你达到的最大化效果一定是把任务栏也给覆盖住的那种覆盖整个桌面的最大化效果。

最后只好先关上其中两扇,然后通过其他途径达到关闭第三扇的效果,在这里鄙视一下C#。

界面方面的东东太TMD多了,先说这些。

 


顶一下(33 写日记 1244897 236844
最近访客
分享排行

 

 

留住已经逝去的峥嵘岁月 记住曾经绽现的万种风情 在记忆即将淡漠的时候 来把这些重新回味

Copyright (C) 2008-2014 www.juexiang.com, All Rights Reserved.

京ICP备2023001011号-3   京公网安备11010802011908号

客服QQ 1017160561 违法和不良信息举报电话 13148464312 邮箱 1017160561@qq.com