GUIDE - Selecting textbox by iterations - get(handle​s.***,'Str​ing')

조회 수: 1 (최근 30일)
Jonathan
Jonathan 2013년 4월 11일
Hi all, I was wondering if anyone knew of a more elegant way to get the values of a list of inputs. I have 10 (possibly more) edit box inputs and I want to populate a vector with their values IF there is a value present. I can do it this way:
speedVector = [];
timeVector = [];
for box = 1:10
switch box
case 1
speedVector(1) = str2double(get(handles.speed1,'String'));
timeVector(1) = str2double(get(handles.time1,'String'));
case 2
speedVector(2) = str2double(get(handles.speed2,'String'));
timeVector(2) = str2double(get(handles.time2,'String'));
case 3
speedVector(3) = str2double(get(handles.speed3,'String'));
timeVector(3) = str2double(get(handles.time3,'String'));
case 4
speedVector(4) = str2double(get(handles.speed4,'String'));
timeVector(4) = str2double(get(handles.time4,'String'));
case 5
speedVector(5) = str2double(get(handles.speed5,'String'));
timeVector(5) = str2double(get(handles.time5,'String'));
case 6
speedVector(6) = str2double(get(handles.speed6,'String'));
timeVector(6) = str2double(get(handles.time6,'String'));
case 7
speedVector(7) = str2double(get(handles.speed7,'String'));
timeVector(7) = str2double(get(handles.time7,'String'));
case 8
speedVector(8) = str2double(get(handles.speed8,'String'));
timeVector(8) = str2double(get(handles.time8,'String'));
case 9
speedVector(9) = str2double(get(handles.speed9,'String'));
timeVector(9) = str2double(get(handles.time9,'String'));
case 10
speedVector(10) = str2double(get(handles.speed10,'String'));
timeVector(10) = str2double(get(handles.time10,'String'));
end
if isnan(speedVector(box)) || isnan(timeVector(box))
speedVector(box) = [];
timeVector(box) = [];
break
end
end
but that is clearly not a very clean way to do it. I'd like to use a loop to systematically go to each box and get a value.
Thanks! - Jon
  댓글 수: 5
Mahdi
Mahdi 2013년 4월 12일
I meant listbox to select data values from. I wasn't aware that he wanted the user to input these values (but I guess that's what an editbox is for!). Out of curiosity, wouldn't a uitable work as well?
Image Analyst
Image Analyst 2013년 4월 12일
Like you said, with a listbox you can select prepopulated items from the list. The user cannot enter new items for speed and time, which is what Jonathan wanted to do, into a listbox.
You could enter data in a grid also - just depends on what kind of "look" you want your GUI to have.

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2013년 4월 11일
Why have a loop and switch statement? I see no need for either one at all. Just get every one, which you're doing anyway, without any loop!
  댓글 수: 4
Jonathan
Jonathan 2013년 4월 11일
Fair enough, I was kind of thinking of having it user-expandable in the future i.e. "Add more fields" kind of functionality.
Just for clarification, would it be possible to do what I'm asking? I can make it work regardless, but I don't have a complete grasp on handles and this seems like there would be a fairly simple solution to indexing components of a GUI... perhaps using UserData (?)
Thanks for taking your time to help me understand this, I really appreciate it.
Image Analyst
Image Analyst 2013년 4월 11일
Yes, but you'd have to either have the max number and hide the ones you don't want/need, or you'd have to create them dynamically with uicontrol().

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Migrate GUIDE Apps에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by