我创建了以下 uitable
:
实际上每一行都是一个独立的uitable
,所以图中显示的除了标题之外还包含5个uitables。为什么我这样做是我的 last question 的问题, 产生了所示的表格。您可以在答案 here 中找到完全可执行的代码(或下面的最小示例)。使用通用 GUI 的解决方案也有,但它会把代码炸得太多,实际上它似乎只是一种错误。
可以看出,每次我跳到下一行,因此跳到另一个合适的行时,最后一个选择仍然突出显示,这看起来很愚蠢,尽管它对功能无关紧要。
uitables 有一个 'SelectionHighlight'
属性,听起来像是一个解决方案,但它并没有改变任何东西。我按如下方式使用它:
set(src,'SelectionHighlight','off') %where src is the handle of the current uitable
在不同的地方:在 'CellSelectionCallback'
的末尾,在 'CellEditCallback'
的末尾以及作为全局属性。但每次最后一个单元格仍然被选中。其实我根本不需要选择。
如何为我的所有 uitables 禁用整个选择或选择突出显示属性?
我要如何使用这个属性,让它有效果?
或者:如何更改“突出显示”颜色(以及文本颜色)以便突出显示不再可见?
显然这个问题也出现了in other contexts .
我创建了一个最小可执行示例,其中可以在每一行中选择 1 到 3 之间的数字。
function minimalTable
%basic properties
line_height = 21.32;
table_height = 3*line_height;
lh = line_height/table_height;
h = figure('Position',[200 100 202 table_height],'numbertitle','off','MenuBar','none');
% addrow(figurehandle,number of row, percentage lineheight)
% every function call creates a new row, later dynamically
addRow(h,1,lh);
addRow(h,2,lh);
addRow(h,3,lh);
end
function modifySelection(src,~)
set(src,'SelectionHighlight','off')
waitfor(src)
end
function [th] = addRow(fh,k,lhp)
selector = { '1'; '2' ; '3' };
defaultData = {'select number...'};
columnformat = { {selector{:}} };
columneditable = true;
th = uitable(fh,'Units','normalized','Position',[0 1-k*lhp 1 lhp],...
'Data', defaultData,...
'ColumnName', [],...
'ColumnWidth', {200},...
'ColumnEditable', columneditable,...
'ColumnFormat', columnformat,...
'RowName',[],...
'SelectionHighlight','off',...
'CellEditCallback',@modifySelection);
end
结果:
最佳答案
经过更深入的研究,我发现 Matlab 支持提供了以下解决方案:
%overwrite data with a dummy and restore the old data afterwards, to force deselection
function modifySelection(src,~)
...
temp = get(src,'Data')
set(src,'Data',{ 'dummy' });
set(src,'Data', temp );
end
执行此操作后,蓝色突出显示消失了,但最后选定单元格周围的虚线仍然存在! 但是我找到了解决这个问题的解决方案,这也使得第一部分变得可有可无。
function modifySelection(src,evt)
...
fh = get(src,'parent'); % get parent figure handle
copyobj(src,fh); % copy uitable to parent figure
delete(src); % delete current uitable
end
这会导致所需的行为:
第二种解决方案的缺点:它有点滞后(可能只是在慢速机器上),因为要创建一个新对象。
关于matlab - 如何取消选择uitable中的单元格/如何禁用单元格选择突出显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19634250/