当前位置: 首页 > news >正文

aardio - 高级选项卡tabs禁止某一项

在某些特殊场合下,需要用到禁止tabs某一项给用户使用的功能。

简单总结一下几种实现方法,并不一定全面,仅供参考。

以下代码都以“批量”设置多项为例(单个的很简单,同理即可),以一个变量保存被禁止的项:

var tbs = win.ui.tabs(winform.nav1,winform.nav2,winform.nav3) ;

tbs.禁止点击的项={1,3} ;

1、简单的将选项设为“禁止”状态,达到鼠标无法点击的效果。

tbs.禁止点击的项={1,3}

for(i=1;#tbs.strips;1){
	tbs.strips[i].disabled = ..table.find(tbs.禁止点击的项,i); 
}

该方法在需要改变被禁止的项时,需要重新设置 tbs.strips[i].disabled 属性。

如将 {1,3} 改为 {1,2} 时:

tbs.禁止点击的项={1,2}

for(i=1;#tbs.strips;1){
	tbs.strips[i].disabled = ..table.find(tbs.禁止点击的项,i); 
}

重要的是,该方法并不安全,容易被用外部工具或代码重置为“可用”状态后再点击,破解简单,所以不建议使用。

2、屏蔽鼠标按下事件,达到鼠标点击无效的效果。

tbs.禁止点击的项={1,3}

for(i=1;#tbs.strips;1){
	tbs.strips[i].wndproc = function(hwnd,message,wParam,lParam){
		if message = 0x201/*_WM_LBUTTONDOWN*/  {
             return ..table.find(tbs.禁止点击的项,i); 
        }
	}
}

该方法比第一种方法安全性高,比较简单、实用。

该方法在需要改变被禁止的项时,只需设置 tbs.禁止点击的项={1,2} 即可,不需要重新设置 tbs.strips[i].wndproc。

但该方法也仅仅是屏蔽了选项卡的“鼠标点击”事件,如果选项卡可以用上一个、下一个等按钮进行切换,或者有快捷键进行切换等复杂操作时,仍旧需要其他额外处理。

当然,如果不嫌麻烦的话,也可以将这些切换选项卡的操作都处理成给对应的 tbs.strips[i] 发送 WM_LBUTTONDOWN 消息,而不是用 selIndex、selStrip、selText、prev()、next() 等进行切换。

如果没有其他切换选项卡的方式,建议采用这种方法。

3、修改tabs实例元表,禁止切换selIndex。

tbs.禁止点击的项={1,3}

tbs@.selIndex1=tbs@.selIndex
tbs@.selIndex={
	_get = function(){
		return 	owner.selIndex1; 		
	}
	_set = function(v){
		if  ..table.find(owner.禁止点击的项,v){
			if #owner.selHistory owner.selHistory[#owner.selHistory].checked=true
			return ;
		}
		owner.selIndex1=v; 
	}

因为该方法是直接从根本上切断selIndex改变的可能性,所以,即使直接用代码 tbs.selIndex=1 都无法进行切换,非常安全,一劳永逸。但因为需要修改tabs实例元表,所以难度稍高,需要对该库有足够的理解。

该方法使用后,对 selIndex、selStrip、selText、prev()、next() 等切换指令均可有效屏蔽。

同样,该方法在需要改变被禁止的项时,只需设置 tbs.禁止点击的项={1,2} 即可,不需要进行其他操作,非常简单。

4、总结:

简单情况下建议用方法2,复杂情况下建议用方法3。

可同时搭配 disabled 使用,在视觉上给人 “禁用” 的明显提示效果。

相关文章:

  • 深度神经网络的应用
  • 质量参差不齐,NFT交易版税该不该收?
  • 学生护眼灯国A与AA哪个牌子好?推荐国AA级的学生护眼台灯
  • 什么是mybatis,其实很简单
  • ViT: Vision transformer的cls token作用?
  • sql2java-excel(一):基于apache poi实现数据库表的导出及支持spring web
  • SSM保险办理系统毕业设计源码012232
  • 先睹为快_Mandelbrot集
  • centos 7 安装mysql 8.0.30
  • TR5521设计资料|TR5521替代方案|DP转VGA设计参考
  • javaweb教师招聘管理系统ssm
  • spring boot —— Spring Security定制权限管理
  • Python从入门到实践:包的使用
  • kubernetes二进制安装教程单master
  • LeetCode-998. 最大二叉树 II【最大二叉树】
  • Joomla 2.x, 3.x useful code cheatsheet
  • Js基础——数据类型之Null和Undefined
  • JS数组方法汇总
  • Making An Indicator With Pure CSS
  • Nacos系列:Nacos的Java SDK使用
  • NSTimer学习笔记
  • PHP变量
  • SpiderData 2019年2月25日 DApp数据排行榜
  • storm drpc实例
  • 搭建gitbook 和 访问权限认证
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 读懂package.json -- 依赖管理
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于 Babel 的 npm 包最小化设置
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 深度学习在携程攻略社区的应用
  • 使用Swoole加速Laravel(正式环境中)
  • 原生JS动态加载JS、CSS文件及代码脚本
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Z0458. 树的中心2
  • (4.10~4.16)
  • (42)STM32——LCD显示屏实验笔记
  • (八)Spring源码解析:Spring MVC
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (十八)SpringBoot之发送QQ邮件
  • (四)Linux Shell编程——输入输出重定向
  • (转)树状数组
  • ******之网络***——物理***
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET MVC之AOP
  • .Net Winform开发笔记(一)
  • .net快速开发框架源码分享
  • .NET学习全景图
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @FeignClient注解,fallback和fallbackFactory
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解