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

Problem mit CreateFcn und "unbekanntem" handle

 

BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 15.01.2014, 13:12     Titel: Problem mit CreateFcn und "unbekanntem" handle
  Antworten mit Zitat      
Hallo zusammen,

ich bin derzeit ohne GUIDE am erstellen einer GUI.
Die meisten Probleme die bisher aufgetreten sind, konnte ich bisher auch lösen, jetzt bin ich aber an einem dran, das ich nicht wirklich verstehe und zwar:

Ich erstelle ein dropdown mit zwei Elementen
Code:
wp.WrTyp.pop1 = uicontrol(wp.fd(1,:),wp.fd(2,:),'Parent',wp.PanWR,'style','popupmenu','position',[145 mw.gap+2.5+mw.step  130 mw.line_height],'string','IGBT|ETAC','Callback','cb_WrTypeSelect(wp)');
 

Im Anschluss daran wird ein Dropdown "initialisiert", das abhängig vom vorherigen Dropdown befüllt wird.
Code:
wp.WrName.pop1 = uicontrol(wp.fd(1,:),wp.fd(2,:),'Parent',wp.PanWR,'style','popupmenu','position',[145 mw.gap+2.5  130 mw.line_height],'string','SKM_600GA176D|bla','CreateFcn','cb_WrTypeSelect(wp)');

Zusätzlich wird der Inhalt des zweiten Dropdown geändert, wenn in Dropdown 1 eine andere Auswahl erfolgt.

Jetzt zum eigentlichen Problem, wenn nun die "Createfcn" ausgeführt wird, habe ich zwar das handle zu wp.WrTyp.pop1, kann allerdings nicht darauf zugreifen.
Code:
get_dropdown(wp.WrTyp.pop1)
Error using handle.handle/get
Invalid or deleted object.

Das eigenartige daran ist, wenn ich den Fehler "überspringe" funktioniert die Callbackfunction einwandfrei, dh. wenn Dropdown1 geändert wird, wechselt auch der Inhalt von Dropdown2 wie gewünscht. Nur eben beim "initialisieren" tritt der Fehler auf.
Weiß hier jemand woran das liegen könnte? "pause" hab ich auch schon mal an diversen stellen eingefügt.

Ich hoffe das ist so verständlich.
Danke fürs lesen und für eventuelle Antworten Wink

Grüße
Chris

Edit war da:
Wenn ich die Funktion als "CreateFcn" rausnehme und einfach nach dem Erstellen des Elements die Funktion ausführe, wird alles wie gewünscht initialisiert... mich würde aber trotzdem noch interessieren, wo mein Denkfehler liegt?
funktioniert-->
Code:
wp.WrName.pop1 = uicontrol(wp.fd(1,:),wp.fd(2,:),'Parent',wp.PanWR,'style','popupmenu','position',[145 mw.gap+2.5  130 mw.line_height],'string','SKM_600GA176D|bla')%;,'CreateFcn','cb_WrTypeSelect(wp)');
cb_WrTypeSelect(wp)

_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.01.2014, 14:02     Titel:
  Antworten mit Zitat      
Hallo

also ich verstehe nicht den Sinn, warum du hier beim zweiten Popup CreateFcn nutzt, wo du diesen beim ersten als Callback nutzt.

Na ja CreateFcn wird beim dem Erstellen der GUI aufgerufen. Das heißt es wird immer nur für einen Graphischen Objekt ausgeführt, welcher Callback ausgelöst hat. Man kann nicht auf andere Objekte in dieser Funktion zugreifen, weil diese eventuell noch nicht erzeugt wurden, da sie noch nicht an der Reihe waren.

Deswegen der Fehler bedeutet, dass das handle des anderen Objekts noch nicht existiert.

Du schreibst, dass du GUI ohne GUIDE erstellst, dann brauchst du keine CreateFcn, weil man kann direkt in der UICONTROL das nötige eingeben.

PS
nutze für die Deklaration der Callbacks den Syntax mit FunctionHandle : @mycallback => dann sparst du FEVAL

Zuletzt bearbeitet von denny am 15.01.2014, 15:55, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Themenstarter

Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 15.01.2014, 14:09     Titel:
  Antworten mit Zitat      
Hallo denny,

ich nutze die CreateFcn, da das Dropdown eigentlich abhängig von existierenden Config-Files initialisiert wird, die in dem Callback "cb_WrTypeSelect" ausgelesen werden. Wird nun in Dropdown 1 ein anderer Typ ausgewählt, muss in einem anderen Ordner nach den Cfgs geschaut werden und diese dann entsprechend im Dropdown aufgelistet werden.
Das ist der Grund weshalb es im einen als Callback und im anderen als CreateFcn drin ist.

Das mit der "Reihenfolge" hatte ich mir auch schon überlegt, aber ich "baue" ja die GUI selbst und das handle zu "wp.WrTyp.pop1" funktioniert auch, wenn ich einen Brakepoint danach setzte. Die CreateFcn wird danach ausgeführt (der Fehler kommt erst danach).

Code:
wp.WrTyp.pop1 = uicontrol(...,'Callback','cb_WrTypeSelect(wp)');
wp.WrName.pop1 = uicontrol(...,'CreateFcn','cb_WrTypeSelect(wp)');

Popup1 wird erstellt und im Anschluss das Popup2 erstellt und in der cb theoretisch abhängig vom Inhalt des Popup1 initialisiert.

Grüße
Chris
_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.01.2014, 14:17     Titel:
  Antworten mit Zitat      
Also

CreateFcn ist eigentlich für GUIDE erstellte GUIs von Nutzen, nicht für selbst gebastelte.

dann rufe nach der Erstellung der Popups diese Funktion einfach auf.

Code:

wp.WrTyp.pop1 = uicontrol(...,'Callback','cb_WrTypeSelect(wp)');
wp.WrName.pop1 = uicontrol(...,'Callback','cb_WrTypeSelect(wp)');




% am Ende der Initialisierung
cb_WrTypeSelect(wp)
 


Zuletzt bearbeitet von denny am 15.01.2014, 15:57, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Themenstarter

Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 15.01.2014, 14:28     Titel:
  Antworten mit Zitat      
Hallo Denny,

das habe ich auch so gelöst (hatte ich noch in ein edit oben im ersten Post gepackt). Aber danke für die Anregung Wink
Dann nutze ich das "Feature" halt nicht Laughing

Grüße
Chris
_________________

--> Kapieren statt Kopieren <---
____________________________________________________
FAQs sind dazu da, FAQs zu beantworten Wink
Richtig fragen!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.01.2014, 16:04     Titel:
  Antworten mit Zitat      
Hallo

Ach so, das habe aus deinem Posting so nicht verstanden.

Ich habe oben noch einen Bemerkung geschrieben:

nutze für die Deklaration der Callbacks den Syntax mit FunctionHandle : @mycallback => dann sparst du FEVAL oder wie hast du das bei dir implementiert?
Code:

wp.WrTyp.pop1 = uicontrol(...,'Callback', {@cb_WrTypeSelect, wp});
 


ist Struktur wp bei dir global definiert?
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.