Verfasst am: 01.04.2019, 12:43
Titel: Shortcuts für Buttons erstellen
Hallo Community,
ich habe folgendes Problem.
Ich würde gerne mit der Enter-Taste mehrere Strings aus mehreren edit_Textboxen in passende Checkboxen schreiben lassen, mit Backspace die Markierten Checkboxeinträge löschen, mit m Markierte Checkboxeinträge zwischen den Spalten verschieben und mit b den Markierten Checkboxeintrag wieder in die edit_Textbox schreiben und bearbeiten.
(zum besseren Verständnis ist im Anhang mein GUI)
Nun ist die Frage, ich habe bereits einen Code mit den gewünschten Ergebnissen geschrieben, nur habe ich dies für Buttons Programmiert. Nun würde ich gerne ebenfalls mit shortcuts (z.B. m-Taste, b-Taste, Enter und Backspace) diese Befehle ausfüren lassen.
Ist das möglich in Matlab.
(Meine Annahme: spezeller Befehl in KeyPressFcn)
Edit: ich habe gesehen, dass du bereits auf die KeyPressFcn gekommen bist. Was hast du damit versucht und welche Probleme sind dabei aufgetreten?
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 ;)
Zuletzt bearbeitet von Harald am 01.04.2019, 13:02, insgesamt einmal bearbeitet
Ich vermute mal, dass du den Edit nicht mitbekommen hast da du beschäftigt bist hoffnungslosen fällen wie mir zu helfen
Also nützlich wäre eine Möglichkeit, dass ich gleich allen Bestandteilen der GUI eine KeyPressFcn geben kann, ohne das ich für jedes Einzelteil eine Fcn erstellen muss
habe ich in der Tat nicht mitbekommen.
Tagsüber habe ich je nach Arbeitsauslastung mal mehr, mal weniger Zeit. Abends zugegebenermaßen nicht immer die Muße.
Ich habe mit KeyPressFcn selbst noch nicht sooo viel gemacht. Daher wäre ein Minimalbeispiel hilfreich, in dem ich mir das Verhalten ansehen kann, ohne erst selbst was zusammenklicken zu müssen.
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 ;)
Das ist nicht umbedingt ein minimal Beispiel und ich bin nicht sicher ob du das meintest, aber hier ist der Befehl für die Ablage mit der Return (Enter) Taste:
Code:
% --- Executes on key press with focus on figure1 and none of its controls. function figure1_KeyPressFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata structure with the following fields (see MATLAB.UI.FIGURE) % Key: name of the key that was pressed, in lower case % Character: character interpretation of the key(s) that was pressed % Modifier: name(s) of the modifier key(s) (i.e., control, shift) pressed % handles structure with handles and user data (see GUIDATA)
%Ablage des geschriebenen Textes in eine unbeschriebene Todo Checkbox
for x = 1:22 if(x <= 21) if(get(handles.(['checkbox', num2str(x)]),'String')=="" && get(handles.edit_Todo, 'String')~= "") set(handles.(['checkbox', num2str(x)]),'String', text_Todo);
set(handles.edit_Todo, 'String', '');
end elseif(x > 21 && get(handles.edit_Todo, 'String')~= "") msgbox('Alle Todo checkboxen sind beschrieben');
end end
%Ablage des geschriebenen Textes in eine unbeschriebene Todo langfristig Checkbox
for x = 1:22 if(x <= 21) if(get(handles.(['checkboxlang', num2str(x)]),'String') == "" && get(handles.edit_Todolangfristig, 'String')~= "") set(handles.(['checkboxlang', num2str(x)]),'String', text_Todolang);
set(handles.edit_Todolangfristig, 'String', '');
end elseif(x > 21 && get(handles.edit_Todolangfristig, 'String')~= "") msgbox('Alle Todo langfristig checkboxen sind beschrieben');
end end
Die KeyPressFcn wird nur ausgeführt, wenn ich das figure1 ausgewählt habe. Wenn ich z.B. in einer edit_Textbox schreibe und dann return drücke passiert nichts, da ich zu dem zeitpunkt die edit_Textbox ausgewählt habe. Um mit return den Text abzulegen muss ich zuerst noch auf die figure drücken.
Nun frage ich mich ob es möglich ist eine KeyPressFcn zu schreiben die alle Elemente der GUI beinhaltet, oder ob es notwendig ist für jedes Element einzeln die KeyPressFcn zu schreiben
meine Idee war etwas ausführbares.
Es sollte möglich sein, jedem Element die gleiche KeyPressFcn zuzuweisen. Wenn du die Handles gesammelt hast, sollte das mit set auch auf einmal gehen.
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 ;)
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 ;)
die Fehlermeldung sagt ja, was du falsch machst. Bei manchen Elementen gibt es keine KeyPressFcn, also kann man auch keine setzen. Banale Abhilfe:
Code:
kpf = get(handles.figure1, 'KeyPressFcn');
flds = fieldnames(handles);
for k = 1:numel(flds) try set(handles.(flds{k}), 'KeyPressFcn', kpf) catch end end
Ich teste das, was ich vorschlage, ja gerne vorher. Das geht aber leider nur, wenn ich auch ein Beispiel (komplettes .fig und .m) habe, an dem ich es testen kann.
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 ;)
Ok mir ist gerade ein kleiner Fehler aufgefallen. Wenn ich das 1. mal return drücke passiert nichts, beim 2. mal return wird der Text aus der edit box geschrieben, dann ändere ich den Text und beim 3. mal return wird nochmal der 1. Text geschrieben und beim 4. mal return erst der 2.
Meine Vermutung, beim Betätigen der return Taste wird erst der eingetragene Text erst gespeicher, und beim erneuten drücken wird dieser eingeschrieben und der eingeschriebene Text erneut gespeicher, also im ganzen wird der gewünschte Text immer erst einen Schritt später geschrieben.
Könnte mir bitte wer mit dem oberen Problem behilflich sein.
PS an Harald: so wie es aussieht bewirkt die figure_WindowKeyPressFcn genau das selbe wie der Code den du mir geschrieben hast, also das alle KeyPressFcn gleichgesetzt werden.
Aber das Problem ist immernoch das gleiche
beim ersten Lesen hatte ich keine Idee.
Beim zweiten Lesen ist meine Vermutung, dass beim ersten Enter der Callback des edit-Feldes ausgelöst wird. Dann müsstest du diese Aktion also zusätzlich als Callback der edit-Felder hinterlegen.
Bei so vielen Beiträgen in einem Thema ist es übrigens unwahrscheinlich, dass sich noch jemand neu einklinkt.
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 ;)
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.