How to tell how an uieditfield was exited?
    9 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    David Aronstein
 il 7 Feb 2020
  
    
    
    
    
    Commentato: David Aronstein
 il 26 Gen 2021
            I have a uieditfield field for text input.
There seem to be at least three ways to indicate to the app that we are finished entering information into this field.  The ValueChangedFcn is called when (1) the user presses Enter, (2) the user presses Tab, or (3) the user changes from the app to another program running on the computer.  
Is there a way to figure out which of these three events occured?  In particular, I'd like to catch (3) and ignore processing the current value of the field for the moment.
0 Commenti
Risposta accettata
  Antonio Hortal
      
 il 24 Gen 2021
        
      Modificato: Antonio Hortal
      
 il 24 Gen 2021
  
      I might be wrong, but you could try getting the CurrentKey property of the figure
function editFieldValueChangedCallback(src,evt)
fig = ancestor(src,'figure');
switch get(fig,'CurrentKey')
    case 'return'
        disp('enter was pressed!')
    otherwise 
        disp('the user changed focus!')
end
3 Commenti
  Antonio Hortal
      
 il 25 Gen 2021
				Hmmm I am using 2020b.. maybe in 2019a the CurrentKey property of the uifigure was not fully supported.
I am using this simple code btw 
f  = uifigure();
ef = uieditfield(f, 'ValueChangedFcn', @(src,evt) valueChangedCallback(src,evt));
function valueChangedCallback(src,~)
% Find the figure and get the last key pressed when the ValueChangedFcn is triggered
f = ancestor(src,'figure');
key = get(f,'CurrentKey');
switch key
    case 'return'
        disp('User pressed enter')
    otherwise
        disp('User changed focus')
end
end
Maybe CurrentCharacter works in 2019a? (Im a bit lazy to check release notes haha)
function valueChangedCallback(src,~)
f = ancestor(src,'figure');
key = get(f,'CurrentCharacter');
switch key
    case {char(10),char(13)} % char(10) for windows and (13) for macs I think
        disp('User pressed enter')
    otherwise
        disp('User changed focus')
end
end
If not, you could still attach a WindowKeyPressFcn callback to the uifigure. Both ValueChangedFcn and WindowKeyPressFcn will trigger when you press enter, and you just have to think on some code something so that the 2 callbacks exchange info.
I hope this helps :)
Più risposte (1)
  Bhargavi Maganuru
    
 il 18 Feb 2020
        After typing in the edit field, if you click anywhere outside the edit field, editFieldValueChanged callback will be triggered. 
Add the following line of code in the callback function.
disp("exited from editfield");
So whenever this message is displayed, user has clicked outside the app. 
Hope this helps!
3 Commenti
  Bhargavi Maganuru
    
 il 19 Feb 2020
				HI David,
As of now there is no programmatic way to tell which of the events has triggered the callback.
Vedere anche
Categorie
				Scopri di più su Data Type Identification in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!