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

auswahl der listbox weiterverwenden

 

lovobo
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2020, 08:23     Titel: auswahl der listbox weiterverwenden
  Antworten mit Zitat      
Hallo,

ich bin ein wenig ratlos, wie ich die auswahl aus einer listbox weiterverwenden kann. Also wenn ich es anklicke und dann blau hinterlegt ist, möchte ich die markierte Auswahl in eine weitere Listbox übertragen.

Ich weiß nur nicht wie. Ich hatte im Netz geschaut und wenn ich es stumpf kopiert hätte, würde es vll funktionieren, jedoch mag ich auch gerne verstehen wie es funktioniert und warum es auch nicht funktioniert.

Mit freundlichen Grüßen
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2020, 08:49     Titel:
  Antworten mit Zitat      
Hallo,

erste Frage: wie erstellst du die GUI? Mit GUIDE, App Designer, oder ganz anders? Empfehlung wäre App Designer.

Soll direkt auf die Auswahl (= den Klick) reagiert werden oder erst im Rahmen eines anderen Callbacks?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2020, 10:12     Titel:
  Antworten mit Zitat      
ja, hab den appdesigner, da gui "bald" abgeschafft wird in neueren version, daher mich auch direkt nur mit appdesigner befasst.

Das auslösen soll erst mit druck auf einen extra button passieren, also im callback dieses buttons.

kleine erklärung: ich bin dabei das was ich vorher als .m files hatte, nun in eine app zu packen. bei diesen skripten hattest du mir auch schon geholfen.
In der app bin ich so weit, als das ich einen ordner auswähle und dort bestimmte dateitypen in der app gelistet werden. diese liste kann ich mittels suchfenster weiter filtern, falls sie zu groß ist.
jetzt bin ich dabei, das wenn ich eine oder mehrere datein auswähle, die dann mittels button in eine gesonderte liste kopieren kann. insgesamt wird es dann 3 seperate listen geben, da ich mit den daten dieser dateien berechnungen anstellen möchte und auch am ende plotten. es handelt sich um die daten selbst und einen schwarzabgleich und eine referenz, diese sollen dann auch in die jeweiligen listen durch vorherige auswahl.

aber irgendwie komme ich nciht dahinter wie xD
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2020, 10:22     Titel:
  Antworten mit Zitat      
ich hab mal ein bild der oberfläche gemacht.
aus testzwecken sind unten noch eine weitere liste zu sehen und auch ein textfeld.
in die untere liste sollen dann die daten, wenn ich auf "Referenz" klicke. Geplant ist, das diese liste auch erst im programm erstellt wird, da ich aber auch da probelme habe, habe ich die listbox so hingesetzt.

Code:
           app.ListBoxDaten = uilistbox(app.UIFigure);
            app.ListBoxDaten.Items = {app.ListBox.Items};
            app.ListBoxDaten.ItemsData = app.ListBox.ItemsData;
            app.ListBoxDaten.ValueChangedFcn = createCallbackFcn(app, @ListBoxValueChanged, true);
            app.ListBoxDaten.Position = [25 25 200 100];
            app.ListBoxDaten.Value = {};
            app.ListBoxValueChanged = @app.datachangedListBoxValueChanged;

Das habe ich aus der Matlab eigenen Hilfe.

das untere textfeld war zur überprüfung des wertes der position der obene listbox ... bis ich darauf kam das man die als string formatieren muss ... xD

Ich finde schade, das das enthaltene Turorial eher ein witz denn ein tutorial ist ... hab ich mir mehr erhofft.

hmm.jpg
 Beschreibung:

Download
 Dateiname:  hmm.jpg
 Dateigröße:  22.53 KB
 Heruntergeladen:  385 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich würde die Listbox trotzdem "normal" von App Designer selbst erstellen lassen, sie aber in der StartupFcn der Figure die Eigenschaft "Visible" der Listbox auf 'off' setzen. Dann, wenn die Listbox sichtbar werden soll, auf 'on'.

Wenn du wissen willst, welche Items ausgewählt sind, musst du Value abfragen. Das ist eine Untermenge von Items.

Ich fand das Tutorial sehr hilfreich. So habe ich als erstes App Designer gelernt. Klar beantwortet das nicht alle Fragen, auf die man irgendwann mal stoßen könnte, das ist m.E. aber auch nicht der Sinn des Tutorials.

Bei deiner "kleinen Erklärung" wird mir nicht klar, wo genau nun das Problem ist. Letztlich muss man "nur" innerhalb des ValueChanged-Callbacks die Value-Eigenschaft abfragen und weiterverarbeiten.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2020, 11:56     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Letztlich muss man "nur" innerhalb des ValueChanged-Callbacks die Value-Eigenschaft abfragen und weiterverarbeiten.


genau das ist der knackpunkt, wie bekomme ich denn die daten ? mit .Value hatte ich das auch schon probiert, bekam aber immer eine Fehlermeldung.

Code:
Error using matlab.ui.control.internal.model.AbstractStateComponent/set.Items (line 184)
'Items' must be a 1-D cell array of character vectors or a string array.


Ich dachte bis jetzt das es ein formatierungsproblem sei, daher bin ich auch total verwirrt was die datentypen angeht im appdesigner. ich habe hier leider keine möglichkeit direkt und sofort zu sehen welche variable was für einen wert hat, da nichts im workspace abgelegt wird. Ich hatte mir da zwischenzeitlich mit "assignin" beholfen, aber es kann ja nicht sein das ich das immer wieder bei jeder neuen variable machen muss.

Wie genau bekomme ich die values ? kann ich zB. folgendes machen
app.neueListe.Items = app.alteListe.Value ?

Ich glaubte auch erst das ich mit get arbeiten muss, und/oder mit handles, aber dazu habe ich keine für mich eindeutigen Beispiele gefunden, oder ich hab mich schlicht dämlich angestellt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
mit .Value hatte ich das auch schon probiert,

was genau hast du probiert? Die Fehlermeldung sagt ja ziemlich klar, wo das Problem ist.

Eigentlich müsstest du doch Value abfragen und nicht setzen?

Zitat:
ich habe hier leider keine möglichkeit direkt und sofort zu sehen welche variable was für einen wert hat, da nichts im workspace abgelegt wird.

Du kannst eine App wie jeden anderen Code auch debuggen. Haltepunkt setzen, Code ausführen und schon sieht man den Workspace.

Zitat:
kann ich zB. folgendes machen
app.neueListe.Items = app.alteListe.Value ?

Sinnvolle Syntax ist es. Ob es das macht, was du willst, weiß ich nicht, weil ich nicht weiß, was du machen willst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2020, 14:07     Titel:
  Antworten mit Zitat      
Code:
[i]was[/i] genau hast du probiert? Die Fehlermeldung sagt ja ziemlich klar, wo das Problem ist.

für dich scheint es glasklar, ich bin mir hingegen nicht so sicher, ich mein klar, lesen kann ich auch, aber was bedeutet das nun genau bezogen auf das was ich erreichen will ?
Versucht habe ich es in einen string umzuwandeln, ruft einen weiteren fehler hervor.

Zitat:
Eigentlich müsstest du doch Value abfragen und nicht setzen?

ja. jaaaaaaaaaaa. aber wie, das ist doch mein kernproblem. ich weiß nicht wie ich an genau jene werte komme und ich habe schon viel danach gesucht. ich vermute das ich das system dabei einfach nicht kapiert habe und mich daher im kreis drehe.

Zitat:
Du kannst eine App wie jeden anderen Code auch debuggen. Haltepunkt setzen, Code ausführen und schon sieht man den Workspace.

hmm, darauf bin ich irgendwie noch nicht einmal gekommen *facepalm*

Zitat:
Zitat:
kann ich zB. folgendes machen
app.neueListe.Items = app.alteListe.Value ?

Sinnvolle Syntax ist es. Ob es das macht, was du willst, weiß ich nicht, weil ich nicht weiß, was du machen willst.

naja, das was ich vorher schon sagte. in liste 1 sind 10 einträge, ich wählre 4 davon aus und diese 4 einträge will ich dann in eine zweite liste übertragen. mittels knopfdruck. grad eben hab ich ein deja vu xD das ich das zu haus bei etwas anderem bereits gemacht habe... egal, jetzt bekomme ich es ja nciht mehr hin.

edit: ich bin grad schon bei stufe 4 aus deine signatur ... mad, das es solvable ist weiß ich, das macht mich ja so mad Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.02.2020, 14:22     Titel:
  Antworten mit Zitat      
Hallo,

nochmal:
Zitat:
was genau hast du probiert?

Also den Code, der die Fehlermeldung erzeugt.

Zitat:
ja. jaaaaaaaaaaa. aber wie, das ist doch mein kernproblem. ich weiß nicht wie ich an genau jene werte komme und ich habe schon viel danach gesucht.

Code:
selected = app.listboxName.Value

wobei listboxName der Name der Listbox in deiner App ist.

Wenn du die listbox in eine App ziehst und den Callback dazu anlegst, dann steht diese Zeile sogar schon im Callback drin.

Ich habe jetzt gerade noch eine kleine App gebaut und bekam zunächst die gleiche Fehlermeldung: wenn nur ein Item ausgewählt wurde, ist Value ein char-Array. Dann muss man es vorher in ein Cell packen, bevor man es den Items der zweiten Listbox zuweist.
Code:
           value = app.ListBox.Value;
            if ~iscell(value)
                value = {value};
            end
            app.ListBox2.Items = value;

Zur Referenz die Beispiel-App im Anhang.

Grüße,
Harald

app1.zip
 Beschreibung:

Download
 Dateiname:  app1.zip
 Dateigröße:  11.55 KB
 Heruntergeladen:  344 mal

_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.02.2020, 14:51     Titel:
  Antworten mit Zitat      
hatte versucht value zu string zu konvertieren mit dem ergebnis:
Code:
Error using string
Conversion from cell failed. Element 1 must be convertible to a string scalar.

das hat mich sehr verwirrt da es bedeutet das es bereits eine cell ist, was eine voraussetzung ist (siehe vorherige fehlermeldung). und das es kein 1-D array ist.

Der fehler besteht weiterhin, auch mit deiner anpassung. Nun habe ich den debugger genutzt und value ist ein 1x2 Struct mit 2 feldern. Das sind die daten, welche sich "hinter" den dateinamen verbergen.

Und das ist dann der punkt der mich schwerst mehrfach verwirrt, in den .m files war es so einfach und hier kommt es mir vor als hätte ich hier datenbingo, weil ich einfach kein schema erkenne.

Seis drum, ich dachte, das ich nebst dateinamen, auch den dateiinhalt in value drin habe, es scheint aber, das die beiden files die ich auswählte nun zusammengepackt wurden und statt der dateinamen "value" als namen haben.

Ich bin ehrlich, ich kapiers nicht. zuhaus hatte ich das mit randomzahlen in einer liste ausprobiert und die dann in eine andere liste gepackt, das klappte problemlos.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bitte gib immer an, welcher Code die Fehlermeldung erzeugt. Ohne diese Info ist es äußerst schwierig, bei der Beseitigung des Fehlers zu helfen.

Da das in meiner App ja funktioniert hat, ist bei dir anscheinend etwas anders. Die Frage ist was. Also:
- Welches Release verwendest du?
- Kannst du eine App zur Verfügung stellen (ggf. mitsamt benötigter Daten), in der das Problem auftritt?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2020, 08:11     Titel:
  Antworten mit Zitat      
ich glaub ich weiß warum das passiert, das werde ich vorher noch ausprobieren und sollte ich noch immer auf den fehler stoßen, lad ich das sam beispieldateien hoch.

meine vermutung, ich hab das einfach schlecht programmiert vom ablauf her. ich lese bereits den inhalt der daten, sobald die im ersten auswahlfenster sind, was nicht nur unnötig ist, sondern auch zu dem fehler führen könnte.

Edit: ja, so wie ich dachte ... wäre ich vorher mal selbst auf den debugger gekommen, hätte ich das selbst schon vor einiger zeit gesehen ... narf. danke für den hinweis. Smile

Es geht nun auch wieder ganz simpel:
Code:
app.neueListe.Items = app.alteListe.Value


Der Grund ist wohl, das er bei Value immer ItemsData genommen hat, anstatt Items. ich hatte bereits in der Startup Funktion die Daten auf basis der dateinamen eingelesen, was allein schon aus sicht des ablaufs dumm war.
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2020, 10:22     Titel:
  Antworten mit Zitat      
Ich versuche das grad umzusetzen, die listbox einfach sichtbar bzw. unsichtbar zu machen. die eigentliche box verschwindet auch, jedoch der text nicht, muss man den irgendwie gesondern unsichtbar machen ?

Im designview selbst verschwindet der text, wenn man dort zum test die sichtbarkeit ausschaltet.

Code:
           value = app.Switch.Value;
            if value == "On"
                app.ListBox2.Visible = "On";
            else
                app.ListBox2.Visible = "Off";                
            end


So hatte ich das probiert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

interessant. Kontaktiere doch mal den Technischen Support von MathWorks. Das könnte ein Bug sein.

Schneller Workaround: Label der Listbox leer machen und ein separates Label verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
lovobo
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 50
Anmeldedatum: 26.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.02.2020, 10:28     Titel:
  Antworten mit Zitat      
Hatte das mal gepostet, aber irgendwie hat keiner reagiert, bin mir auch nciht sicher ob ich es an der richtigen stelle gepostet habe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.