Hello,
I have a GUI made with guide and I encounter a problem. A function is computing some data and then should display it on a uitable. However, I have multiple UItable (named datatable_1 to datatable_5) and when I use get and set, I have a Invalid handle object. Here is the code :
tablename = ['handles.datatable_',num2str(row)]; <-- row corresponds to the uitable I want to update
cellFN = get(tablename, 'data');
I'd like the functions get and set to understand tablename as handles.datatable_ n and not as tablename. I've been looking around the FAQs and forum but found nothing (apart from the demonic eval). If anyone as an idea that would be great.
Thank you,
Vincent
PS: already tried to use cell or structure to force the good interpretation but in vain.

3 Kommentare

Stephen23
Stephen23 am 24 Okt. 2017
Bearbeitet: Stephen23 am 24 Okt. 2017
If you had put the handles into an array then this would be trivial with indexing. By deciding to make lots of separate variables you have painted yourself into a corner, because now your bad design decision limits your to writing bad, slow, complex, buggy code.
This is why we are always telling beginners not to create numbered variables and or try to access them. Indexing is simple, neat, and very efficient, and works with graphics handles perfectly. Indexing does not require cell arrays or structures for your situation: for R2014b or later create the array using gobjects, while for pre-2014b MATLAB versions use zeros or nan.
Your bad data design requires accessing the variable names, which will always be slow, complex, and buggy:
Vincent MAILLET
Vincent MAILLET am 24 Okt. 2017
Bearbeitet: Vincent MAILLET am 24 Okt. 2017
Hi,
Thank you for your quick answer. I didn't know the existence of gobjects. And since I currently have Matlab2010 it is not available. I will try your technic as soon as I have the newest version
Stephen23
Stephen23 am 24 Okt. 2017
Bearbeitet: Stephen23 am 24 Okt. 2017
" I will try your technic as soon as I have the newest version"
Why wait? Using an array works for any version: for any pre-2014b version just use an array of doubles.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Cam Salzberger
Cam Salzberger am 24 Okt. 2017

1 Stimme

Hello Vincent,
Stephen is correct about code design, and I would recommend making arrays of handles. Prior to "gobjects" being available, feel free to pre-allocate the array with simple doubles, or just build the array dynamically. Your graphics objects array should be sufficiently small for it to not have a huge impact on code.
If you would like a stop-gap measure that will work with your numbered variables, you can use dynamic field names for structures:
handles.(['datatable_' num2str(1)])
-Cam

Weitere Antworten (0)

Kategorien

Mehr zu Data Type Identification finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by