Вам нужно будет вручную сохранить последнее нажатое поле. Если вы используете GUIDE для разработки GUI, используйте структуру handles
, которая передается функциям обратного вызова. В противном случае, если вы программно сгенерируете компоненты, тогда вложенные функции обратного вызова получат доступ к переменным, определенным внутри их вмещающих функций.
EDIT
Вот полный пример: щелкните правой кнопкой мыши и выберите «Поменять» в контекстном меню, затем выберите другое текстовое поле для обмена строками (щелкните левой кнопкой мыши). Обратите внимание, что я должен был отключить / включить текстовые поля между двумя шагами, чтобы иметь возможность запустить ButtonDownFcn (см. Объяснение на этой странице )
function myTestGUI
%# create GUI
hLastBox = []; %# handle to textbox initiating swap
isFirstTime = true; %# show message box only once
h(1) = uicontrol('style','edit', 'string','1', 'position',[100 200 60 20]);
h(2) = uicontrol('style','edit', 'string','2', 'position',[400 200 60 20]);
h(3) = uicontrol('style','edit', 'string','3', 'position',[250 300 60 20]);
h(4) = uicontrol('style','edit', 'string','4', 'position',[250 100 60 20]);
%# create context menu and attach to textboxes
hCMenu = uicontextmenu;
uimenu(hCMenu, 'Label','Swap String...', 'Callback', @swapBeginCallback);
set(h, 'uicontextmenu',hCMenu)
function swapBeginCallback(hObj,ev)
%# save the handle of the textbox we right clicked on
hLastBox = gco;
%# we must disable textboxes to be able to fire the ButtonDownFcn
set(h, 'ButtonDownFcn',@swapEndCallback)
set(h, 'Enable','off')
%# show instruction to user
if isFirstTime
isFirstTime = false;
msgbox('Now select textbox you want to switch string with');
end
end
function swapEndCallback(hObj,ev)
%# re-enable textboxes, and reset ButtonDownFcn handler
set(h, 'Enable','on')
set(h, 'ButtonDownFcn',[])
%# swap strings
str = get(gcbo,'String');
set(gcbo, 'String',get(hLastBox,'String'))
set(hLastBox, 'String',str)
end
end