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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. tbs.禁止点击的项={1,3}
    2. tbs@.selIndex1=tbs@.selIndex
    3. tbs@.selIndex={
    4. _get = function(){
    5. return owner.selIndex1;
    6. }
    7. _set = function(v){
    8. if ..table.find(owner.禁止点击的项,v){
    9. if #owner.selHistory owner.selHistory[#owner.selHistory].checked=true
    10. return ;
    11. }
    12. owner.selIndex1=v;
    13. }

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

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

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

    4、总结:

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

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

  • 相关阅读:
    使用Piwigo管理您的照片
    【LeetCode】209. 长度最小的子数组
    【视频课】超8小时,5大模块,掌握基于GAN的图像增强应用(降噪色调映射去模糊超分辨修复)...
    IPSec站点到站点 配置实例
    react——强制刷新页面三种方式(更)
    深入浅出 Linux 中的 ARM IOMMU SMMU I
    12个Python自动化办公的官方文档,中文版只有2个?
    (持续整理)Windows快捷键
    某米ax3000路由器组网解析
    【HuggingFace轻松上手】基于Wikipedia的知识增强预训练
  • 原文地址:https://blog.csdn.net/sdlgq/article/details/126600861