How can i display a uicontrol object at different locations?

4 vues (au cours des 30 derniers jours)
Jonas Hemsen
Jonas Hemsen le 10 Nov 2017
Modifié(e) : Jonas Hemsen le 23 Nov 2017
Hi, I have a GUI with two tabs. On both tabs I want to display the identic edit field so that changes to one of the fields are always synched to both edit fields. Is this possible or unintended by the way GUI programming works?
If so, is there a clean workaround or any other ideas how I could achieve the feature?
Thanks and tell me if you need more specification of the problem. Jonas
  2 commentaires
Geoff Hayes
Geoff Hayes le 10 Nov 2017
Jonas - are you using GUIDE, App Designer, or are you programmatically creating the GUI?
Jonas Hemsen
Jonas Hemsen le 10 Nov 2017
Hi Geoff and thanks for the reply. I use the programmatic way.

Connectez-vous pour commenter.

Réponse acceptée

Geoff Hayes
Geoff Hayes le 13 Nov 2017
Hi Jonas - I suppose that you could assign the same callback to both edit controls. This callback would update a variable that could then be accessed by the other controls.
function sharedEditControl
hEdit1 = uicontrol('Style','Edit',...
'Callback', @EditControlCallback);
pos = get(hEdit1,'Position');
pos(2) = pos(2) + 100;
hEdit2 = uicontrol('Style','Edit',...
'Callback', @EditControlCallback, 'Position',pos);
sharedEditControlValue = [];
function EditControlCallback(hObject, eventdata)
sharedEditControlValue = get(hObject,'String');
fprintf('%s\n', sharedEditControlValue);
end
end
  1 commentaire
Jonas Hemsen
Jonas Hemsen le 23 Nov 2017
Modifié(e) : Jonas Hemsen le 23 Nov 2017
Hi Geoff, thanks for the help, you brought me on the right way. With little editing of your code I could solve the task. Here is what I changed and the code is shown below.
  • I created a figure first
  • I stored the handles of the edit fields in the figures UserData field to be able to access the edit fields later on
  • Additionally the handles must be present within the callback function in order to be able to change the value of them. This is why the main figure handle (with the edit fields handles stored in it) is passed into the callback.
  • And in the end obviously printing the edit field value in the command line with fprintf() is not what I intended so I just set the values of both edit fields to read out value.
hFig = figure;
hFig.UserData.handles.hEdit1 = uicontrol('Style','Edit',...
'Callback', {@EditControlCallback, hFig});
pos = get(hFig.UserData.handles.hEdit1,'Position');
pos(2) = pos(2) + 100;
hFig.UserData.handles.hEdit2 = uicontrol('Style','Edit',...
'Callback', {@EditControlCallback, hFig}, 'Position',pos);
function EditControlCallback(hObject, eventdata, handles)
handles.UserData.handles.hEdit1.String = eventdata.Source.String;
handles.UserData.handles.hEdit2.String = eventdata.Source.String;
end
Thanks again Jonas

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Interactive Control and Callbacks dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by