闲话休提~
一:自定义Tab按钮
如图所示
我们的tab按钮左部是文字;右部是关闭按钮;
此按钮有两种状态:选中和未选中
未选中的按钮鼠标滑上背景色会变为淡蓝色;
选中的按钮背景色是黄色
关闭按钮鼠标滑上去是深黄色
控件中涉及的属性和公开的事件属性
注释还是比较清楚的,就不多说了
接着看这个控件自己的事件
移入和移出事件都是要触发移动事件的
移动事件要先判断鼠标所在的位置,是不是出于关闭按钮位置;
然后再根据鼠标的位置以不同的颜色绘制控件
下面看绘制控件和判断鼠标位置的相关方法
我们在创建控件的时候得到了文本的宽度
根据这个宽度来绘制控件文本和关闭按钮的位置
我们在属性里为这个控件定义了事件的handler
下面看看这些handler是怎么触发的
到此为止完成了tab按钮的制作
可能有些地方还做的不是很完美~欢迎批评指正
二:业务窗体的基类
所有的业务窗体都继承自这个基类BaseForm
这个窗体基类有三个公开的属性
这三个属性在后面会用到
这里先不说了
一般顶层窗体是不允许被当作子控件放在容器控件中的
所以我们要设置窗体的TopLevel属性
这是tab按钮的两个事件~
在创建tab按钮的时候注册的~
待会我们再说怎么创建的tab按钮和注册这两个事件~
因为并不是在baseForm里创建的tab按钮
这是BaseForm的一个重要事件
隐藏和显示切换的时候被触发
如果从隐藏变为显示
先遍历所有打开过的业务窗体,如果有是显示状态的,那么就把他隐藏掉,因为当前系统只能有一个业务窗体是出于显示状态的
接着选中TAB按钮,
FormHistory的Remove和Insert主要是为了让系统记住哪些窗体是最近显示过的;
MainContainerP的Clear和Add是为了让窗体显示在容器控件内
如果从显示变为隐藏
TAB按钮取消选中,
子菜单的背景颜色变成透明的,(其实就是子菜单取消选中)
事件处理的开始取消了事件注册
事件处理的结束有把事件注册进去了
这样做主要是为了避免多次触发事件
Utils.GetMainForm();获取主窗口的代码如下:
当业务窗体关闭时要处理一些逻辑
代码如下
取消事件注册
移除历史记录
取消子菜单选中
打开最近一次打开的业务窗体(如果有的话)
重写设置tab按钮的位置(主要是被关闭的tab按钮的右边的tab按钮)
删除tab按钮
三:动态创建业务窗体
我们在上一节中只讲了子菜单的滑入和滑出事件,而没有讲单击事件
单击事件就是创建业务窗体的事件了
来看一下代码
其实这个方法里的业务逻辑不多
主要的还是f = CreateOneForm(m);这一句
我们把菜单的URL字段拿出来,反射了一个业务窗体的实例
然后创建了tab按钮的实例,并让这个业务窗体持有这个实例
注意tab按钮的close和select事件是怎么注册的哦~ 亲~
好吧~就这些~
今天的内容比较多~
写的匆忙~有问题大家尽情的提吧~
接下来的内容是:登录、闪屏、客户端缓存数据、WCF安全验证
大叔~大婶~大哥~大嫂~大妹子~点个推荐吧~点个推荐吧~