2015-11-26 2 views
0

Я использую метод KeyPressFcn для окна редактирования, чтобы проверить, нажата ли клавиша ввода. Я могу использовать call_back, но функция event_back функции event_data отсутствует.matlab's GUI KeyPressFcn

Если я нажимаю один раз на кнопку 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

Согласно документации, найденной в UIControl Properties (http://www.mathworks.com/help/matlab/ref/uicontrol-properties.html;jsessionid=49b9dc47d9f964ec95a4fe2cc9f3),

Эта функция обратного вызова выполняется, когда объект UIControl имеет фокус, и пользователь нажимает клавишу. Если вы не определяете функцию для этого свойства, MATLAB передает нажатия клавиш на родительский рисунок. Повторные нажатия клавиш удерживают фокус uicontrol, и функция выполняется при каждом нажатии клавиши. Если пользователь нажимает несколько клавиш примерно в одно и то же время, MATLAB обнаруживает нажатие клавиши для последней нажатой клавиши.

Проще говоря, Callback будет вызываться, когда вы нажимаете кнопку ввода в первый раз, и KeyPressFcn будет применен при втором нажатии.

Смежные вопросы