对于我正在编程的用户界面uitable.用户在第一列中选择选项A,B或C,第二列中的子选项取决于在第一列中选择的内容,A.1,A.2或A.3或B.1,B.2或B.3或C相同

该表的代码可以在附录A中找到.
当用户首先定义主选项时,子菜单会自动减少到仅有效选项.这是由evalulating实现的CellEditCallback第1列和重置ColumnFormat列2(函数modifySelection在附录B)如果用户现在意识到,他犯了一个错误,需要编辑子选项另一次,则ColumnFormat仍然按照以前的编辑组主要选项和有效选项不可用,除非他再次重新选择主选项.(见图中的蓝色突出显示).
为了解决这个问题,我还实现了CellSelectionCallback调用函数justifySelection(在附录B中),该函数通过选择进行检查,在第1列中选择了哪个选项以再次为第2列提供正确的子选项.但是由于此回调对选择作出反应,我需要选择两次,一次触发CellSelectionCallback,另一次实际选择.对于大型桌子,这可能非常烦人!
所以我的问题是:
有没有办法阻止第2列中的弹出菜单弹出,直到它找出相应列1的内容是什么,所以它会立即提供有效的选择?
要么:
如何检测单元格上的鼠标单击并获取行和列索引?但是没有调用以下选择并弹出动作?
我已经耙了所有可用的属性,但没有发现任何有用的东西.也许人们可以使用ButtonDownFcn,但如何获得细胞指数?怎么样的BusyAction财产,怎么能用于我的目的?
有任何想法吗?
我很抱歉用这么多代码轰炸你,它已经是最小的例子,但是完全可执行,所以你可以尝试一下.
附录A/B.
function fancyUitable
selector_1 = { 'A'; 'B' ; 'C' };
selector_2 = { 'first select first row!' };
h = figure('Position',[200 100 268 120],'numbertitle','off','MenuBar','none');
defaultData = repmat( {'select main option...', …Run Code Online (Sandbox Code Playgroud) 我创建了以下内容uitable:

实际上每一行都是独立的uitable,所以显示的数字除了标题之外还包含5个uitable.为什么我这样做是我上一个问题的问题,导致显示的表格.您可以在此处的答案中找到完全可执行的代码(或下面的最小示例).使用通用GUI的解决方案也存在,但它会过多地破坏代码,实际上它似乎只是一种bug.
可以看出,每当我跳到下一行,因此到另一行时,最后的选择仍然突出显示,这看起来很愚蠢,尽管它对功能无关紧要.
有一个属于'SelectionHighlight'uitables 的属性,听起来像一个解决方案,但它没有改变任何东西.我用它如下:
set(src,'SelectionHighlight','off') %where src is the handle of the current uitable
Run Code Online (Sandbox Code Playgroud)
在各个地方:在一个结束时'CellSelectionCallback',在一个结束时'CellEditCallback'和作为全球财产.但每次最后一个单元格仍然被选中.其实我根本不需要选择.
如何为所有我的uitables禁用整个选择或选择突出显示属性?
我如何使用此属性,它有效果?
或者:如何更改"突出显示"颜色(以及文本颜色),以便突出显示不再可见?
显然,这个问题也出现在其他情况下.
我创建了一个最小的可执行示例,其中可以在每行中选择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,~) …Run Code Online (Sandbox Code Playgroud)