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

pulldown mit schleife

 

Kai_K
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2013, 12:22     Titel: pulldown mit schleife
  Antworten mit Zitat      
Hallo Zusammen,

ich habe eine Frage bezüglich popupmenues.
Ich möchte die Auswahlliste mit einer for Schleife befüllen.

rufe ich die Liste manuell auf über:

set(hObject, 'String', {Konzepte{1},Konzepte{2}, Konzepte{3}});

klappt es. Nun habe ich mit einer Schleife einen String erstellt.
(String = {Konzepte{1},Konzepte{2}, Konzepte{3}} )

Bei dem Aufruf

set(hObject, 'String', String)

wird mir nun jedoch nur eine Zeile im Menü angeboten, in der die Inhalte aus den Konzepten aneinander gereiht stehen.

Hat jemand eine Idee, wie ich diese trennen und untereinander schreiben kann?

Besten Dank schon mal,
viele Grüße,

Kai
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: 19.09.2013, 12:40     Titel:
  Antworten mit Zitat      
Hallo,

die beiden Varianten sollten in der angegebenen Form genau das gleiche machen, da es egal ist, ob du eine Variable angibst oder direkt deren Inhalt. Ist vielleicht beim Erstellen des Strings etwas schiefgegangen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2013, 12:44     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für die schnelle Antwort.
Soweit ich das überblicke ist der String korrekt erstellt.
Siehst du vielleicht einen Fehler? Hier noch der Code mit dem ich den String erstelle.

Code:

%Schleife zum Erstellen des Strings
n = size (Konzepte,1)
String = 'Konzepte{1}'
String = [String,', ']
for n = 2:n
a = n
n = ['Konzepte{']
if a < size (Konzepte,1)
n = [n,num2str(a),'}, ']
else
n = [n,num2str(a),'}']  
end
String = [String,n]
end
%String an Pulldown Menue übergeben
 set(hObject, 'String', String);
 


Besten Dank, und Grüße,
Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai_K
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2013, 13:20     Titel:
  Antworten mit Zitat      
Okay, hab es hinbekommen Smile

Das Problem war, dass ich in dem String noch einmal auf ein anderes Array zugegriffen hab.
Daher musste ich den String erst einmal mit "eval" ausführen.

Hier der funktionierende Code

Code:


%Schleife zum Erstellen des Strings
n = size (Konzepte,1)
String = '{Konzepte{1}'
String = [String,', ']
for n = 2:n
a = n
n = ['Konzepte{']
if a < size (Konzepte,1)
n = [n,num2str(a),'}, ']
else
n = [n,num2str(a),'}}']  
end
String = [String,n]
end
String = eval(String)
%String an Pulldown Menue übergeben
set(hObject, 'String', String);
 
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: 19.09.2013, 16:39     Titel:
  Antworten mit Zitat      
Hallo Kai_K,

Brrr. EVAL ist immer eine schlechte Wahl.
Ich kann beim Lesen des Codes nicht mehr auf Anhieb erkennen, was überhaupt gemacht wird.
Wenn ich es richtig verstehe, sollte dies direkt funktionieren:
Code:
set(hObject, 'String', Konzepte);

Komplizierte Methoden zu verwenden um komplizierte Strings zu erzeuigen, die dann ineffizient per EVAL abgearbeitet werde, ist sagenhaft unpraktisch. Trotzdem ist es weit verbreitet und Du findest hier im Forum bestimmt 1000 Diskussionen zum Thema, die alle das gleiche Ergebnis haben: Es gibt immer eine bessere Lösung.

Übrigens:
Code:
A = {'a', 'b', 'c', 'd'};
% Nun erzeugen folgende Ausdrücke das gleiche Ergebnis:
B = {A{1}, A{2}, A{3}};
C = A(1:3);

Das zweite ist aber schneller und übersichtlicher.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai_K
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2013, 17:15     Titel:
  Antworten mit Zitat      
Hallo Jan,

du hast recht. Dein Aufruf funktioniert wunderbar!
Hatte es auch erst so probiert, aber da muss sich irgendwo ein Tippfehler eingeschlichen haben. Jetzt funktioniert es jedenfalls, ohne den unübersichtlichen String Teil Smile

Besten Dank dafür!

Grüße, Kai
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.