当前位置:服务支持 >  软件文章 >  Matlab App Designer:表格控件单元格锁定设置

Matlab App Designer:表格控件单元格锁定设置

阅读数 325
点赞 75
article_banner

背景

        对下面的表格控件,想实现灰色单元格部分所有的列不允许修改,而白色单元格部分,仅“显示”列才能修改。

        需求可整理如下:         1.“列名称”都不允许修改;

         2.“显示列”灰色部分不允许修改,而白色单元格可以修改

表格控件

编写逻辑

    1.在操作过程中,为实现<需求1:“列名称”都不允许修改>可以通过对表格控件的属性

ColumnEditable进行设置:

Handle.ColumnEditable = [true,false]

    2.基于以上,若是通过选中单元格后再进行修改,则可以通过表格回调

CellSelectionCallback进行设置,如下面截图所示

箭头所示部分为选中单元格,选中后再修改单元格内容

        对应的回调写法为:

       if max(source.Selection==[2 3 ])==1 % 表格控件的属性Multiselect为‘off’,属性SelectionType为‘row’            Handle.ColumnEditable(1)  =false;        else; Handle.ColumnEditable(1)  =true;        end

这样就实现了选中单元格时,通过控制表格属性ColumnEditable的值来实现选中单元格的是否允许修改。

    3.在2中的设置方式,仅支持选中单元格内容编辑,但对于本次项目中的checkbox的修改却是不合适的。这是因为在MATLAB 2023b版本中,在ColumnEditable(1)=true时,直接点击灰色的“显示”列中的checkbox进行修改是不会首先触发表格回调CellSelectionCallback的

    为解决这个问题,还需要使用表格回调CellEditCallback来进行设置,对应的编写逻辑为,若修改的数据位于灰色单元格部分,则直接给修改后的数据重新再次赋值为默认数据(event.PreviousData),对应的回调内容编写如下:

  if max(event.Indices(:,1)==[ 2 3 ])==1 % 表格控件的属性Multiselect为‘off’,属性SelectionType为‘row’           Handle.ColumnEditable(1)  =false;            source.Data(event.Indices(:,1),1) ={event.PreviousData}; % 程序执行到此时,通过强制将PreviousData再次赋值给表格控件来实现表格内容的伪保持        else; Handle.ColumnEditable(1)  =true;        end

选中第二行时,对单元[4,1]的checkbox(箭头部分)进行修改时,此时true已经变成false,下次需要再次赋值为false

 强调

        在情况3中,表格内容修改时(如上图箭头所示),回调CellEditCallback已经触发,但表格控件的source.Selection还等于2(也就是说回调CellSelectionCallback此时还没有触发)。也就是说回调触发优先级排序上,回调CellEditCallback>回调CellSelectionCallback

相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利