|
|
Im Popup-Menü eigene Werte eingeben: Warum NaN bei Ausgabe? |
|
teutopixx |
Forum-Fortgeschrittener
|
|
Beiträge: 77
|
|
|
|
Anmeldedatum: 09.03.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.04.2011, 14:26
Titel: Im Popup-Menü eigene Werte eingeben: Warum NaN bei Ausgabe?
|
|
|
|
|
Hallo,
nachdem ich mir das Skript von Joanna (http://www.gomatlab.de/popup-menue-.....wertuebergabe-t12704.html) angesehen habe und auch diesen Beitrag gelesen habe http://www.gomatlab.de/pop-up-menue.....2566,highlight,popup.html, dachte ich mir, dass ich mein Popup-Menü aufpeppe, und auch die Möglichkeit einbaue, dass man als User eigene Werte eingeben kann.
Ich frage die Auswahl (zur Verfügung stehen bisher nur Zahlen, und auch der Nutzer soll nur Zahlen eingeben) im Popup-Menü allerdings durch switch-case ab.
Also:
Nun ergibt sich im weiteren Verlauf des GUIs, dass ich neben einigen anderen Werten auch den selbst eingegebenen Wert abspeichern möchte.
Unter dem Callback eines Pushbuttons (der für das Speichern zuständig ist) steht dann folgendes
Alles speichere ich als *.dat-Datei. Wenn ich nun schaue, was er mir als Benutzereingabe gespeichert hat, steht dort "NaN", und nicht die Zahl die ich eingegeben habe.
Vorher (als ich die benutzerdefinierte Eingabe noch nicht hatte), standen dort immer die Zahlen, die im Popup ausgewählt wurden.
Irgendwie scheint es an der Rückgabe von inputdlg zu liegen, allerdings weiss ich nicht, wie ich das in den Griff bekommen soll.
Eine weitere Frage wäre, wie ich die die Eingabe begrenzen kann.
Gibt es die Möglichkeit, zum einen
a) nur Eingaben zuzulassen, die unter einer gewissen Zahl liegen (also z. B. alle Zahlen von 0 - 10000 (10000 könnte dann ja in einer Variablen stehen)
b) nur die Eingabe von Zahlen (also keine Buchstaben) zuzulassen?
[/url]
_________________
----
teutoPIXX
|
|
|
|
|
Peter Quint |
Forum-Fortgeschrittener
|
|
Beiträge: 95
|
|
|
|
Anmeldedatum: 21.02.11
|
|
|
|
Wohnort: Lübeck
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 19.04.2011, 14:52
Titel:
|
|
Hallo teutopixx,
kann es sein, dass Du
im Callback des Pushbuttons verwechselt hast? Sieht für mich so aus..
|
|
|
Peter Quint |
Forum-Fortgeschrittener
|
|
Beiträge: 95
|
|
|
|
Anmeldedatum: 21.02.11
|
|
|
|
Wohnort: Lübeck
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 19.04.2011, 14:59
Titel:
|
|
zu a) und b)
Ich habe eine Textbox die handles.box heißt. Wenn etwas anderes als zahlen eingeben werden, wird der alte Wert gesetzt. Dafür musst Du natürlich in der OpeningFct. eine entsprechende handles.LastValue (in dem ein logischer Anfangswert steht) anlegen.
In der Callback-Fkt der Textbox steht:
Natürlich kannst Du im "else-Fall" ein zweites if einbauen um die größe der zahl zu testen und ggf. den alten Wert zu laden
|
|
|
teutopixx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 77
|
|
|
|
Anmeldedatum: 09.03.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 19.04.2011, 21:23
Titel:
|
|
Ob ich handles.popup mit handles.text verwechselt habe, weiss ich grad nicht. Muss ich morgen nochmal nachsehen.
Allerdings zu meinem zweiten Problem: Ich habe ja keine Text-Box, sondern einen "inputdlg", der sich beim Anklicken der letzten Auswahlmöglichkeit eines Popup-Menüs auftut... Würde Dein Vorschlag damit auch funktionieren!?
_________________
----
teutoPIXX
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 19.04.2011, 23:28
Titel:
|
|
Hey,
also zwei Sachen solltest du Beachten:
1.
2. Wenn du im Popupmenu den 5. Fall also Value = 5 hast, dann darfst du nicht den String vom Popupmenu benutzen, denn da steht bestimmt keine Zahl an 5. Stelle oder? Also kannst du doch gleich den String vom Text benutzen den du ja immer mit der gewählten Zahl setzt wie Peter schon sagt...
MfG Marco
|
|
|
teutopixx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 77
|
|
|
|
Anmeldedatum: 09.03.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.04.2011, 09:42
Titel:
|
|
Peter Quint hat Folgendes geschrieben: |
Hallo teutopixx,
kann es sein, dass Du
im Callback des Pushbuttons verwechselt hast? Sieht für mich so aus.. |
Hallo Peter!
In meinem Callback des Pushbuttons (der dann die durch den Nutzer getätigten Angaben speichern soll) steht:
und im weiteren dann
Ich lese doch damit die Benutzerauswahl im Popup-Menü aus, oder irre ich da?
Wenn in dem Popup-Menü z. B. zwischen "2", "4", "8", "16" und "eigenen Wert eingeben" gewählt werden kann, speichert mir Matlab auf diesem Weg die Zahlen auch wirklich als Zahl (und nicht alsString) in eine Variable.
_________________
----
teutoPIXX
|
|
|
teutopixx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 77
|
|
|
|
Anmeldedatum: 09.03.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.04.2011, 10:03
Titel:
|
|
|
|
|
Marco H. hat Folgendes geschrieben: |
Hey,
also zwei Sachen solltest du Beachten:
1.
2. Wenn du im Popupmenu den 5. Fall also Value = 5 hast, dann darfst du nicht den String vom Popupmenu benutzen, denn da steht bestimmt keine Zahl an 5. Stelle oder? Also kannst du doch gleich den String vom Text benutzen den du ja immer mit der gewählten Zahl setzt wie Peter schon sagt...
MfG Marco |
Hallo Marco,
mit deinem Vorschlag funktioniert es schon ganz gut. Sobald ich bei eigene Eingabe eine Zahl eingebe, wird diese auch tatsächlich als Zahl gespeichert.
Ein Problem ergibt sich nun jedoch noch durch folgende Tatsache:
Der Benutzer wählt im Popup-Menü aus den Zahlen 2, 4 6, und 8 aus, oder gibt eine eigene Zahl aus.
Diese Zahlen lasse ich in einem Textfeld nochmal zur Kontrolle (wie bereits erwähnt) anzeigen.
Da es sich jedoch um Einheitsbehaftete Zahlen handelt, wird in dem Textfeld die Einheit noch drangehängt... hatte ich vergessen, zu erwähnen,
Also ergibt sich für das switch-case-Konstrukt des Pushbutton folgender Code:
Somit habe ich dann im Textfeld z. B. 2 Stück stehen.
Damit kann ich leider nicht mehr ganz so einfach das Textfeld mit str2double wandlen und ablegen. Matlab schreibt mir auch dann nälich immer "NaN" in die Variable ein.
_________________
----
teutoPIXX
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 20.04.2011, 10:20
Titel:
|
|
Hey,
das ist ja kein Problem. Nutze einfach strrep z.B.
MfG Marco
|
|
|
teutopixx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 77
|
|
|
|
Anmeldedatum: 09.03.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.04.2011, 10:45
Titel:
|
|
Danke, Marco!
Das werde ich probieren.
Nun ist mir noch was aufgefallen...so langsam wirds für mich unübersichtlich oder ich hab's einfach zu kompliziert aufgebaut.
Ich nutze Deinen Code für die benutzerdefinierte Eingabe:
Soweit, so gut.
Nur steht damit im Textfeld ja noch nicht die Einheit (hier z. B. Stück) dahinter.
Also dachte ich mir, ich kann es genauso machen, wie vorher im switch-case-Konstrukt auch.
Aus welchem Grund auch immer, wenn ich eine Zahl eingegeben habe, setzt er mir dann nicht die Einheit dahinter.
_________________
----
teutoPIXX
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 20.04.2011, 10:58
Titel:
|
|
Hey,
ja denn inputdlg gibt ein cell raus. In deinem Fall ein 1x1 Cell. Also musst du
schreiben. Du kannst das auch selber herausfinden indem du dir die Variablen beim Debuggen anschaust...
MfG Marco
|
|
|
teutopixx |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 77
|
|
|
|
Anmeldedatum: 09.03.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 20.04.2011, 13:00
Titel:
|
|
Super! Nun funktioniert's!
Ich glaub mit den einzelnen Datenstrukturen muss ich mich nochmal näher befassen...
_________________
----
teutoPIXX
|
|
|
Peter Quint |
Forum-Fortgeschrittener
|
|
Beiträge: 95
|
|
|
|
Anmeldedatum: 21.02.11
|
|
|
|
Wohnort: Lübeck
|
|
|
|
Version: R2010b
|
|
|
|
|
|
Verfasst am: 20.04.2011, 21:02
Titel:
|
|
Hi teutoPIXX,
Du eillst in Deinem Textfeld immer "x Stück" stehen haben. Willst aber, das der User eigene Zahl eingeben kann. Nicht nur um es Dir programmiertechnisch einfacher zu machen sonders auch für die Usability würde ich Dir raten zwei Textboxen (eine statische in der die Einheit, in Deinem Fall "Stücke" steht) zu kreieren. Du kann auch ganz einfach bei der Eingabe von '1' die statische Textbox auf "Stück" setzen und umgekehrt.
So weiß der User immer genau was er wie eintragen kann und Du musst Dich nicht mit einen Zahlen-Buchstaben-mix der u.a. auch unterschiedlich sein kann (z.B. schreib einer nur "8" oder "8 Stücke" oder "8Stücke" oder "8 Stck"...)
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|