ich habe versucht das Problem mit den Popupmenüs zu lösen. Allerdings bin ich gescheitert. Es werden mir zwar keine Fehler angezeigt, aber das Programm schafft es leider auch nicht in die if-Bedingungen zu schalten, wie es mir scheint.
Ich weiß mittlerweile wirklich nicht weiter. Ich habe hin und her überlegt, wie ich das ganze am besten umsetzen kann, aber es klappt nicht so wie ich möchte.
Ich würde halt gerne, dass ich beispielsweise die ersten beiden Popup-Menüs mit Minus auswähle. Das dritte Popupmenü belege ich dann mit Plus. Dabei soll in den ersten beiden Edit-Feldern Minus1 und Minus2 stehen, im dritten halt Plus1 Wenn ich dann aber beispielsweise das erste Popupmenü wieder nehme und dort erneut das schon vorhandene Minus auswähle, dann soll nichts passieren. Wähle ich dort dann aber Plus aus, dann würde ich am liebsten, dass im ersten Edit-Feld Plus 1 steht, im zweiten Editfeld muss sich das Minus2 zu Minus1 ändern und im dritten Edit-Feld soll Plus2 statt Plus 1 dann stehen.
Das ist schon ein sehr dynamisches Problem, wo ich zur Zeit einfach keine Lösung finde. Und ich zerbreche mir jetzt wirklich schon mehrere Tage lang den Kopf.
Ich schicke euch anbei nochmal die Dateien als zip. Vllt. könnt ihr mir ja doch nochmal auf die Sprünge helfen. Also Fehlermeldungen erhalte ich zur Zeit keine, aber es funktioniert eben auch nicht so, wie ich es wünsche.
bitte überlege dir genau, was du willst, bevor du dich an die Umsetzung machst und anderen dazu Fragen stellst. Die jetzige Beschreibung weicht deutlich von der anfänglichen ab, und damit auch wie ich das umsetzen würde. Die mit der vorherigen Aufgabenstellung verbrachte Zeit ist also aus meiner Sicht verschwendet.
Beim jetzigen Ansatz besteht ja keine Notwendigkeit mehr, die vorherige Auswahl abzuspeichern. Man kann ja dann in der gemeinsamen Updatefunktion
- die Popupmenüs der Reihe nach durchgehen
- schauen, wie oft bestimmte Auswahlen getroffen wurden (Anfang: 0)
- die nächste Nummer für den Text verwenden und den Zähler für die Gruppe um 1 erhöhen.
Es spielt ja nicht mal mehr eine Rolle, welches Popupmenü das Update eigentlich ausgelöst hat.
es tut mir leid, dass das ganze jetzt ein bisschen verschwommen ist. Allerdings waren deine Mühen keinesfalls umsonst, denn deinen Code konnte ich sehr gut an anderer Stelle (an der ich ihn von vorne herein haben wollte) nutzen.
Das jetzt ist ein neues Problem, was ich allerdings bewusst in diesem Thread habe stehen lassen, da es eben wieder um Popup-Menüs geht, diesmal nur um eine andere Art der Anwendung.
Daher vielen Dank, dass du mir trotzdem weiterhin versuchst zu helfen.
Ich verstehe allerdings nicht ganz, wie ich das ganze implementieren kann. Was konkret meinst du mit der 'gemeinsamen Updatefunktion', wie komme ich an diese dran?
Und ich weiß auch nicht genau, wie du das ganze mit dem Zähler meinst? Wenn ich den Zähler immer nur um einen erhöhe, dann aber wieder ins erste Popup-Menü springe, wie in meinem Beispiel:
Zitat:
Ich würde halt gerne, dass ich beispielsweise die ersten beiden Popup-Menüs mit Minus auswähle. Das dritte Popupmenü belege ich dann mit Plus. Dabei soll in den ersten beiden Edit-Feldern Minus1 und Minus2 stehen, im dritten halt Plus1 Wenn ich dann aber beispielsweise das erste Popupmenü wieder nehme und dort erneut das schon vorhandene Minus auswähle, dann soll nichts passieren. Wähle ich dort dann aber Plus aus, dann würde ich am liebsten, dass im ersten Edit-Feld Plus 1 steht, im zweiten Editfeld muss sich das Minus2 zu Minus1 ändern und im dritten Edit-Feld soll Plus2 statt Plus 1 dann stehen.
beschrieben, dann würde ja im ersten Edit-Feld statt Plus1 wie erwünscht, Plus2 stehen, da der Zähler um einen nach oben gegangen ist oder?
Hast du einen Implementierungsvorschlag? Ich danke dir jetzt schonmal sehr für deine Hilfe!
Was konkret meinst du mit der 'gemeinsamen Updatefunktion'
Wie bisher auch die updatePopupmenu, die aus dem Callback jedes Popupmenüs aufgerufen wird.
Zitat:
Wenn ich den Zähler immer nur um einen erhöhe, dann aber wieder ins erste Popup-Menü springe, wie in meinem Beispiel [...] beschrieben, dann würde ja im ersten Edit-Feld statt Plus1 wie erwünscht, Plus2 stehen, da der Zähler um einen nach oben gegangen ist oder?
Nicht, wenn du den Zähler bei jedem Update bei 0 anfangen lässt.
Fang doch mal an, das umzusetzen. Bei Schwierigkeiten kann ich ja nochmal draufschauen.
ich denke ich werde mich heute Abend/morgen früh mal dransetzen und es versuchen wie von dir beschrieben in die Tat umzusetzen. Allerdings verstehe ich nich nicht ganz, wie ich es mit dem Zähler machen soll. Weil angenommen ich setze den wieder auf Null, dann ändert sich ja noch nichts in den anderen Edit-Feldern. Mein Problem ist noch, dass ich nicht verstehe, wie ich es hinkriegen soll, dass, wenn ich im ersten Popupmenü etwas ändere, was Auswirkungen auf die anderen Popupmenüs hat, wie in meinem Beispiel geschildert:
Zitat:
Ich würde halt gerne, dass ich beispielsweise die ersten beiden Popup-Menüs mit Minus auswähle. Das dritte Popupmenü belege ich dann mit Plus. Dabei soll in den ersten beiden Edit-Feldern Minus1 und Minus2 stehen, im dritten halt Plus1 Wenn ich dann aber beispielsweise das erste Popupmenü wieder nehme und dort erneut das schon vorhandene Minus auswähle, dann soll nichts passieren. Wähle ich dort dann aber Plus aus, dann würde ich am liebsten, dass im ersten Edit-Feld Plus 1 steht, im zweiten Editfeld muss sich das Minus2 zu Minus1 ändern und im dritten Edit-Feld soll Plus2 statt Plus 1 dann stehen.
ich diese Auswirkung/Aktualisierung der anderen Popupmenüs hinbekomme. Weil ich mich ja nur in dem aktuell angewählten mit meiner function updatePopupmenu bewege.
Aber wie gesagt, ich werde es mal versuchen und dann bei Problemen dir mal den Code zukommen lassen und dich wieder um Rat fragen.
ich habe mich jetzt mal dran gesetzt und versucht es zu lösen! Ich bin soweit auch zu einer Lösung gekommen, die auch funktioniert, allerdings erhalte ich eine Menge an Warnungen.
Allerdings bekomme ich wie schon erwähnt immer folgende Warnungen, wenn ich das Programm teste:
Code:
>> Funktionentest
Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
> In openfigLegacy at 120
In gui_mainfcn>local_openfig at 286
In gui_mainfcn at 158
In Funktionentest at 42 Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
> In openfigLegacy at 120
In gui_mainfcn>local_openfig at 286
In gui_mainfcn at 158
In Funktionentest at 42 Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
> In movegui at 113
In openfigLegacy at 94
In gui_mainfcn>local_openfig at 286
In gui_mainfcn at 233
In Funktionentest at 42 Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
> In movegui at 113
In openfigLegacy at 94
In gui_mainfcn>local_openfig at 286
In gui_mainfcn at 233
In Funktionentest at 42 Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
> In openfigLegacy at 120
In gui_mainfcn>local_openfig at 286
In gui_mainfcn at 233
In Funktionentest at 42 Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
> In openfigLegacy at 120
In gui_mainfcn>local_openfig at 286
In gui_mainfcn at 233
In Funktionentest at 42
Ich verstehe allerdings nicht, was mir die Warnungen sagen. Ich habe schonmal ein wenig im Internet recherchiert, allerdings nicht wirklich was zielführendes gefunden.
Hast du eine Idee, wie ich diese Warnungen eliminieren kann? Wo liegt der Fehler?
Entschuldige Harald,
jetzt funktioniert es. Der Fehler ist dann aufgetreten, als ich deine Code-Passage zur Löschung des 'Please choose ...' implementiert hatte.
Der Code sah dann so aus:
Allerdings wäre es sehr interessant, zu wissen, wie ich bei der Auswahl eines Elements es schaffe, dass das 'Please choose...' verschwindet. Dafür habe ich keine Lösung parat. Deine Lösung klingt mir eigentlich sehr plausibel, allerdings führt sie wie erwähnt zu folgendem Fehler und es verschwindet zusätzlich noch ein Popupmenü:
Code:
>> Funktionentest
Subscript indices must either be real positive integers or logicals.
Error in Funktionentest>updatePopupmenu (line273) ifstrcmp((str{val}), 'Minus')
Error in Funktionentest>popupmenu1_Callback (line114)
updatePopupmenu(hObject, handles)
Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
Warning: popupmenu control requires that Value be an integer within String
range
Control will not be rendered until all of its parameter values are valid
>>
Der Fehler ist nahezu identisch zu dem, den ich im vorherigen Post gesendet habe. Allerdings ist der aus dem vorherigen Post erstaunlicherweise in der eig. funktionsfähigen Version entstanden, direkt nachdem ich die Passage zur Löschung des 'Please choose...' herausgenommen habe. Beim ersten Mal danach kam dieser Fehler, dann nicht mehr.
Naja Kuriositäten gibt es ja in jedem Programm
Aber hast du denn eine Lösung für den aktuellen Fehler? Bzw. eine weitere Idee, wie ich es schaffe, dass das 'Please choose...' gelöscht wird, sobald in den einzelnen Popupmenüs was ausgewählt wurde?
nutze doch bitte selbst den Debugger, dann siehst du ja, was schiefgeht.
Auch hier die Frage: was soll der Entfernen von 'Please choose...' in der Schleife?
Kaum zieht man es vor die Schleife, funktioniert auch schon alles wunderbar.
danke für deine Antwort. Sorry manchmal steht man irgendwie auf dem Schlauch. Da hätte ich selbstverständlich selber drauf kommen MÜSSEN. Aber ich war so sehr in die for-Schleife vertieft, dass ich gar nicht mehr die Möglichkeit des Schreibens ausserhalb der Schleife in Erwägung gezogen habe. Vielen Dank für die Blickveränderung. Und noch einen schönen Sonntag Abend!
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
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.