欢迎光临散文网 会员登陆 & 注册

2020-10-12 MATLAB App Designer—锁定uitable控件内部分单元格(非列)

2020-10-12 18:45 作者:-何其-  | 我要投稿

背景

工作中遇到一个情况,就是要设置下面图中,黑色的单元格内容无论怎么修改 true 或者 false 都显示为 false的情况

实例图片

尝试

1.对于uitable控件来说,采用ColumnEditable属性控制

只适用于列控制,故仅修改列的ColumnEditable属性是无法实现的

2.针对方法1进行修改,实现功能:当鼠标点选黑色单元格的时候,设置该列属性ColumnEditable为false,表格选中的回调函数代码如下:

    % 表名 app.ViewAnalysisData

Id = cell2mat(arrayfun(@(x)sum( ...

         source.StyleConfigurations.Style(x).BackgroundColor)==3,...

         (1:height(source.StyleConfigurations)),'Un',false))==1;

 Id = source.StyleConfigurations.TargetIndex{Id}==event.Indices;

if  max(Id(:,1)&Id(:,2))==1

       app.ViewAnalysisData.ColumnEditable(unique(event.Indices(:,2))) = true;

else

      app.ViewAnalysisData.ColumnEditable(unique(event.Indices(:,2))) = false;

end

方法2 存在一个问题,采用鼠标修改Sheet1和时程列的true和false时,matlab支持单元格选中在点击checkbox修改(2方法适用)和直接点击checkbox修改(2方法则不适用,程序报错)

3.对表格控件的DisplayDataChangedFcn进行修改,凡是source.Data中包含黑色单元格的均不传递给表格控件app.ViewAnalysisData.Data,代码如下:

 % 表名 app.ViewAnalysisData

Id = cell2mat(arrayfun(@(x)sum( ... 

        app.ViewAnalysisData.StyleConfigurations.Style(x).BackgroundColor)==0,...                     (1:height(app.ViewAnalysisData.StyleConfigurations)),'Un',false))==1;

Id = app.ViewAnalysisData.StyleConfigurations.TargetIndex{Id==1}; % 获取黑色单元格的单元的Indices

source.Data(Id(:,1),Id(:,2)) = {''};  % 删除包含黑色单元格的单元Indices

app.ViewAnalysisData.Data  = source.Data; % 将剔除后的数据传递给表格控件

评价

推荐方法3,支持matlab单元格选中在点击checkbox修改(2方法适用)和直接点击checkbox修改的两种途径




2020-10-12 MATLAB App Designer—锁定uitable控件内部分单元格(非列)的评论 (共 条)

分享到微博请遵守国家法律