I realise I can use the SelectionChangedFcn as a hack to probably achieve this behaviour (though I haven't yet tried), but that is an ugly solution, requiring me to either store more properties than I otherwise need on my class or traverse the tree every time a selection is made to check if it is a parent node. I was hoping there would be a nice option at node creation time to just disable the ability to select it.
Is it possible to disable parent node selection in a uitree?
34 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Is there any way to disable certain nodes in a uitree from being selectable? In particular I have a situation similar to that shown below, where I have multiple parent nodes to group objects within the tree. I want to allow the user to select objects from different groups (e.g. Banana and Carrot here), but I don't want to allow the parent node 'Fruit' to be selected because this makes no sense in my use case, it is just there as a grouping (and I don't wish it to represent selecting every item in that group either, it's not a helpful use case for me).
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1450172/image.png)
I'm still relatively new to the App Designer style of UI components, but I don't see any option on the node properties to allow this.
4 commentaires
Mario Malic
le 4 Août 2023
You can also use the Tree component with the checkmark, it is in the component browser, it's often overlooked. So you can use the CheckedNodes property to do what you need to do with the selection.
Réponses (1)
Mario Malic
le 14 Août 2023
Hey,
I hope you have sorted it out, however, here's an example in which SelectionChangedFcn is used to remove the nodes which have children from selection.
h = uitree("Multiselect","on");
fruitH = uitreenode(h, "Text", "Fruit");
vegH = uitreenode(h, "Text", "Veg");
uitreenode(fruitH, "Text", "Apple");
uitreenode(fruitH, "Text", "Fig");
uitreenode(vegH, "Text", "Carrot");
uitreenode(vegH, "Text", "Cabbage");
h.SelectionChangedFcn = @(src, evt) treeSelectionChangedFcn(src,evt);
Function is below
function treeSelectionChangedFcn(src, evt)
selection = src.SelectedNodes;
selectionChildren = {selection(:).Children};
selectionIdx = cellfun(@isempty, selectionChildren);
src.SelectedNodes(~selectionIdx) = [];
end
0 commentaires
Voir également
Catégories
En savoir plus sur Environment and Settings dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!