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

textedit Callback ausschließlich mit Enter

 

skyforce
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.10.2014, 13:07     Titel: textedit Callback ausschließlich mit Enter
  Antworten mit Zitat      
Hallo zusammen,

ich habe in mein GUI mehrere textedit-objekte. Normalerweise wird die jeweiligen Callback-Funktion ausgeführt, wenn man die Enter bzw. die Tabulator-Taste betätigt oder wenn man mit der Maus zu einem andern Textedit springt.

Nun möchte ich, dass die jeweilige Callback-Funktion ausschließlich durchs Drücken der Enter-Taste ausgeführt wird. Gibt es da eine Einstellung dafür?

Ich freue mich auf eure Antwort

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


skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 11:43     Titel:
  Antworten mit Zitat      
Niemand eine Idee?

Mit freundlichen Grüßen
skyforce
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: 11.10.2014, 13:09     Titel:
  Antworten mit Zitat      
Hallo,

mir ist kein Weg bekannt, das zu erreichen. Ich habe auch noch nicht gesehen, dass jemand das machen wollte. Was ist denn die Motivation dafür?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 14:27     Titel:
  Antworten mit Zitat      
hallo,

es ist ein Kassenprogramm. Es gibt 2 Eingabe Felder:

1. Eingabe-Feld: Hier werden die Artikelnr. eingegeben
2. Eingabe-Feld: Hier wird der Name des Kunden eingegeben.

wenn man etwas in das 1. eingabe-Feld getippt hat und aus Versehen auf das 2. Eingabe-Feld klickt, dann wird die Callback-Fcn des 1.Feld bereits ausgeführt und die Artikelnr wird registriert, was ich aber nicht wollte.

Ich habe mit KeyPressFcn folgendes versucht:
Der komplette Code in der Callback-Fcn habe ich in die KeyPressFcn verpackt. Die KeyPressFcn übernimmt also die Rolle der Callback-Fcn. D. h. sobald ich enter drücke, werden die Befehle ausgeführt.

Code:
set(handles.eingabe,'KeyPressFcn',@eingabe_enter);

function eingabe_enter(src,evnt)
k= evnt.Key;
handles = guidata(src);
hObject = handles.eingabe;

if strcmp(k,'return')
      artikel   = get(handles.eingabe,'String');
      ...
     set(handles.listbox,'String',handles.rechnung);
     set(handles.thekelist,'String',handles.thekebon);
     set(handles.kuechelist,'String',handles.kuechebon);
     set(handles.eingabe,'String','');
end
guidata(hObject, handles);
 

die Callback-Fcn ist komplett leer
Code:
function eingabe_Callback(hObject, eventdata, handles)
 


Leider funktioniert es noch nicht richtig. Die Aktuelle Eingabe werden nicht sofort übernommen sondern verzögert. Bsp:

es wurde z.B die Artikelnr. "3" eingegeben => es passiert nichts.
nun wird eine neue Artikelnr. "4" eingebenen => die Artikelnr. "3" wird registriert und nicht die "4"

Mit freundlichen Grüßen
skyforce
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: 11.10.2014, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

wie wäre es damit, neben die beiden Textfelder einen Push-Button zu setzen und die Aktion erst dann auszuführen, wenn der Push-Button gedrückt wird?
Der Callback beider Textfelder bliebe leer bzw. würde höchstens die Gültigkeit der Eingabe überprüfen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 14:34     Titel:
  Antworten mit Zitat      
ich möchte aber nicht über Pushbutton arbeiten sondern komplett über die Tastatur bzw. Enter-Taste. Die Bedienung zwischen Maus und Tastatur ist manchmal sehr umständlich
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 14:36     Titel:
  Antworten mit Zitat      
oder meinst du, die Keypress-fcn soll dann die Callback-fcn des Buttons ausführen, sobald enter gedrückt wird.

Die Callback-Fcn der Eingabe-Felder bleiben leer
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 14:51     Titel:
  Antworten mit Zitat      
hi,

ich habe das Problem gelöst nämlich mit

Code:
if strcmp(k,'return')
     pause(0.01)
     handles = guidata(src);
     hObject = handles.eingabe;
end
 

Pause von 0.01s hat geholfen Smile

Nun möchte ich mit Pfeiltasten zwischen den Eingabe-Feldern wechseln können. Kennst du da eine Möglichkeit dafür?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 11.10.2014, 14:52     Titel: Re: textedit Callback ausschließlich mit Enter
  Antworten mit Zitat      
skyforce hat Folgendes geschrieben:
Nun möchte ich, dass die jeweilige Callback-Funktion ausschließlich durchs Drücken der Enter-Taste ausgeführt wird.


Das trifft doch aber eingeschränkt zu. Die callback Funktion eines Textfelds wird nach einer Eingabe nur beim Drücken von Enter aufgerufen. Oder wenn nach der Eingabe im Textfeld ohne abschließendes Enter ein anderes Objekt der GUI betätigt wird.

Somit müsstest du der zweite Fall irgendwie gesondert behandelt werden. Aber aktuell fällt mir da auch noch nichts sinnvolles ein.
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 14:55     Titel:
  Antworten mit Zitat      
wie bereits oben erwähnt habe ich wie folgt gelöst:

- Komplette Callback-Fcn des Eingabe-feldes in die Keypressfcn packen (Ausführung sobald Enter gedrückt wird).
- Pause einbauen
- Callback-Fcn des Eingabe-feldes leer lassen

Wie kann ich nun mit den Pfeiltasten zwischen den Eingabefeldern springen?
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: 11.10.2014, 15:02     Titel:
  Antworten mit Zitat      
Hallo,

das sollte mit tab bzw. shift-tab gehen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 15:06     Titel:
  Antworten mit Zitat      
Leider springt der Cursor nicht direkt zum nächsten Eingabefeld sondern erst zu dem Button, der daneben liegt.

Gibt es einen Befehl dafür, mit dem Man bestimmtes Eingabefeld auf "aktiv" setzt? Ich meine der Cursor soll direkt dort hin.
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 15:20     Titel:
  Antworten mit Zitat      
Die Lösung für das Springen steht hier, man kann die Reihenfolge der Objekte ändern:

http://www.mathworks.de/de/help/mat.....is/setting-tab-order.html

Ich habe außerdem meine KeyPressfcn erweitert: Sobald man die "Nach Rechts"- Taste drückt, schickt matlab mit hilfe von java.awt.Robot class einen Tab-Befehl Smile
Mehr dazu steht alles hier:

http://undocumentedmatlab.com/blog/gui-automation-robot

Eventuell kennt jemand eine bessere Methode mit dem Pfeiltasten?
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 11.10.2014, 15:22     Titel:
  Antworten mit Zitat      
Sofern du mit GUIDE arbeitest gibt es unter "Tools" den "Tab Order Editor" mit dem man die Reihenfolge festlegen kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
skyforce
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 04.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2014, 15:28     Titel:
  Antworten mit Zitat      
Mein 2.Problems ist zwar halbwegs gelöst. ich bin aber noch nicht ganz zufrieden.

kann ich in Matlab auch bestimmte Textfelder auf aktiv setzen, sodass der Cursor dann direkt dort hin springt. Z.B so was:

Code:
set(handles.textedit1,'aktiv','on')
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.