WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

subgui aus maingui schließen

 

gui_einsteiger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2012, 12:56     Titel: subgui aus maingui schließen
  Antworten mit Zitat      
Hallo,

ich habe ein Maingui und ein Subgui und möchte, dass beim schließen des Mainguis automatisch auch das Subgui geschlossen wird. Wie kann ich das ganze umsetzten. Ich habe in meinem Maingui die CloseRequestFcn und muss der ja irgendwie klar machen, dass auch GUI 2 geschlossen werden muss (über delete?)

Vielen Dank schon mal für die Hilfe
gui_einsteiger


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2012, 13:18     Titel:
  Antworten mit Zitat      
Hallo,

genau, du schließt das subgui über close oder delete unter Verwendung des entsprechenden Handles. Wo treten dabei Probleme auf?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.03.2012, 14:00     Titel: Re: subgui aus maingui schließen
  Antworten mit Zitat      
Hallo gui_einsteiger,

Man muss also die Handles der erstellten SubGUIs im MainGUI speichern, wenn sie erstellt werden. Dann muss aber auch die DeleteFcn des SubGUI den Handle wieder aus dieser Liste austragen, wenn das SubGUI manuell geschlossen wird.

Eine Alternative wäre von dem automatischen Schließen der SubGUIs per ishandle zu testen, ob das Fenster noch offen ist.

Eine weitere Idee ist den SubGUIs einen eindeutigen Tag zu geben und in der DeleteFcn des MainGUI nach diesem Tag suchen lassen, siehe FINDOBJ.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gui__einsteiger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2012, 14:35     Titel:
  Antworten mit Zitat      
Hallo,

mir ist bewusst, das ich am besten über ishandle nachfrage, ob mein subgui geöffnet ist und wenn dies der fall ist das subgui über delete schließe. Was mir momentan noch ein Rätsel ist, wie ich das handle der Subgui in der Maingui abfrage bzw. woher ishandle weiß, ob mein Subgui existiert oder nicht. Hab damit leider noch keine erfahrung.

Vielen Dank für eure hilfe
gui_einsteiger
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2012, 15:21     Titel:
  Antworten mit Zitat      
Hallo,

zwei Vorschläge:
1. Die Sub-GUI das Handle über die OutputFcn des Sub-GUI an das Haupt-GUI zurückgeben lassen.
2. Dem Sub-GUI ein Tag geben, damit du es so über FINDOBJ finden kannst, siehe Jans Beitrag.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gui__einsteiger

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2012, 15:37     Titel:
  Antworten mit Zitat      
Hallo Harald,
ich würde am liebsten Variante 1 umsetzten nur weiß ich leider nicht wie ich das in Quellcode umsetzten soll. Hab leider noch nciht so viel erfahrung im Programmieren von guis und komm mit den handles noch nicht so gut zurecht wie ich das gerne würde. kannst du mir vielleich ncoh ein wenig weiter helfen?

Viele Grüße
gui__einsteiger
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.03.2012, 16:56     Titel:
  Antworten mit Zitat      
Hallo,

ohne deinen Code zu sehen ist das schwierig.

Ich gehe davon aus, dass du deine GUI mit GUIDE erstellst. Dann gibt es im Code eine <name>_OutputFcn. Den dort vorhandenen Code ersetzen durch
Code:
varargout{1} = handles.figure1; % oder was das Tag der Figure ist


In der Haupt-GUI beim Öffnen der Sub-GUI
Code:
subh = <name>;


subh enthält dann ein Handle auf die Sub-GUI, das du in der Haupt-GUI verwenden und für weitere Verwendung abspeichern kannst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 09.03.2012, 07:33     Titel:
  Antworten mit Zitat      
Hallo,

so, nun mal ein Teil von meinem Code, es funktioniert noch nicht so wie es soll.

In meiner Maingui öffne ich mein Subgui nach drücken eines Button:
Code:
% --- Executes on button press in parameter_button.
function parameter_button_Callback(hObject, eventdata, handles)
% hObject    handle to parameter_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

subh=gui2;
setappdata(handles.parameter_button,'subh',subh);


Meine Requestfunktion der Maingui:
Code:
% --- Executes when user attempts to close figure1.
function figure1_CloseRequestFcn(hObject, eventdata, handles)
% hObject    handle to figure1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
data=getappdata(handles.parameter_button);
subh=data.subh;
if isfield(handles,subh)
    delete(handles.gui2)
end
% Hint: delete(hObject) closes the figure
delete(hObject);
 


In der Subgui übergebe ich varargout das Handle:
Code:
% --- Outputs from this function are returned to the command line.
function varargout = gui2_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.gui2;
 


Momentna bekomme ich beim Öffnen des zweiten Guis folgende Fehlermeldung:
??? Reference to non-existent field 'gui2'.

Error in ==> gui2>gui2_OutputFcn at 82
varargout{1} = handles.gui2;

kann mir da jemand weiterhelfen wo ich etwas falsch gemacht habe?

Vielen Dank
gui_einsteiger
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.03.2012, 10:10     Titel:
  Antworten mit Zitat      
Hallo,

das heißt, dass das Tag der Figure wohl nicht gui2 ist. Wenn du einen Haltepunkt an der Stelle setzt, solltest du sehen, welche Felder Handles hat.

Wie gesagt: vermutlich figure1 oder durch was du das ersetzt hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.03.2012, 11:11     Titel:
  Antworten mit Zitat      
Hallo gui_einsteiger,

Du könntest den den Handle der SubGUI direct in the handles-Struct des Main-GUI eintragen:

Code:
function parameter_button_Callback(hObject, eventdata, handles)
handles = guidata(hObject);  % Oder guidata(handles.<figurehandle>)
handles.subh = gui2;
guidata(hObject, handles);  % Update des im figure gespeicherten Structs


Code:
function figure1_CloseRequestFcn(hObject, eventdata, handles)
handles = guidata(hObject);
if ishandle(handles.subh)
    delete(handles.subh)
end
delete(hObject);


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 12.03.2012, 07:35     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe, jetzt funktioniert es so, wie ich es mir vorgestellt habe.
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 22.03.2012, 10:50     Titel:
  Antworten mit Zitat      
Hallo,
ich hab die ganze Zeit gedacht, dass mein Programm so funktioniert wie es ist. Jetzt habe ich gemerkt, dass ich wenn ich mein zweites Fenster nicht öffne ich weder Matlab noch mein Fenster1 schließen kann. Das ist ja nicht Sinn und Zweck des ganzen

Versuche ich das Fenster zu schließen, bekomme ich folgende Fehlermeldung:
??? Reference to non-existent field 'subh'.
woran kann das liegen?
Hier noch mal mein genutzter Quellcode:
CloseRequestFunction von Fenster1:
Code:
handles = guidata(hObject);
if ishandle(handles.subh)
    delete(handles.subh)
end
delete(hObject);


Öffnen von Fenster 2 in Fenster1
Code:
handles = guidata(hObject);  
handles.subh = Gui2;
guidata(hObject, handles);

viele Grüße
gui_einsteiger
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2012, 15:36     Titel:
  Antworten mit Zitat      
Hi,

Versuch es mal damit, dann wird abgefragt, ob das Feld in handles überhaupt existiert (was es vermutlich nicht tut, wenn du die 2. Gui nie offen hattest)
Code:

handles = guidata(hObject);
if isfield(handles,'subh') && ishandle(handles.subh)
    delete(handles.subh)
end
delete(hObject);
 
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.