matlab的GUI KeyPressFcn

时间:2015-11-26 19:01:18

标签: matlab user-interface matlab-figure matlab-guide

我正在使用编辑框的KeyPressFcn方法来测试是否按下了输入。我可以使用call_back但没有event_data call_back函数。

如果我按一下Enter键,则文本不会重写,但如果我按Enter键(快速)按钮的时间比文本重写时间短。

这种行为的原因是什么?

function WriteData(val, name, ind)
     global solver;
     switch ind
         case {14, 15}
             value = strcat('@(t)', val);      
         case 16
             value = strcat('@(x)', val);
         case {17, 18}
             value = strcat('@(x,t)', val);
     end
     eval(strcat('solver.', name, ' = ', num2str(val) ) );

function edit1_KeyPressFcn(hObject, eventdata, handles)
     val = get(hObject, 'String');
     [~, ~, var] = GetActiveData(handles.listbox1); 
     ind = get(handles.listbox1, 'Value'); 
     if (strcmp(eventdata.Key, 'return') )
         WriteData(val, var, ind );
     end

1 个答案:

答案 0 :(得分:1)

根据UIControl属性(http://www.mathworks.com/help/matlab/ref/uicontrol-properties.html;jsessionid=49b9dc47d9f964ec95a4fe2cc9f3)中的文档,

  

当uicontrol对象具有焦点并且用户按下某个键时,将执行此回调函数。如果没有为此属性定义函数,MATLAB会将按键传递给父图。重复按键保持uicontrol的焦点,每次按键都会执行该功能。如果用户几乎同时按下多个键,MATLAB将检测按下最后一个键的按键。

更简单地说,第一次按Enter键时将调用Callback,第二次按下时将应用KeyPressFcn。