我正在使用编辑框的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
答案 0 :(得分:1)
根据UIControl属性(http://www.mathworks.com/help/matlab/ref/uicontrol-properties.html;jsessionid=49b9dc47d9f964ec95a4fe2cc9f3)中的文档,
当uicontrol对象具有焦点并且用户按下某个键时,将执行此回调函数。如果没有为此属性定义函数,MATLAB会将按键传递给父图。重复按键保持uicontrol的焦点,每次按键都会执行该功能。如果用户几乎同时按下多个键,MATLAB将检测按下最后一个键的按键。
更简单地说,第一次按Enter键时将调用Callback,第二次按下时将应用KeyPressFcn。