Verfasst am: 31.07.2013, 16:37
Titel: Suchfeld und ListBox
Hallo liebe Community,
ich hab ein kleines Problem. Ich habe mir eine Gui erstellt, die eine Listbox enthält und ein TextEditFeld. Das letztere soll eine Art Suchfeld sein und funktioniert im Moment so:
Man gibt in das Feld einen Buchstaben oder ein Teilwort bzw. Wort ein, bestätigt mit Enter und dann wird die Listbox auf dei Wörter gekürzt, die dieses Teilwort enthält. Um die gesamte Liste in der Listbox wieder zu erhalten, muss man das Feld leeren und dann mit Enter bestätigen.
Code:
function suchFeld_Callback(hObject, eventdata, handles)
%Deklariere die Variablen und initialisiere diese
global liste;
global Functions;
tmp = 1;
%Schreibe den Inhalt um in Kleinbuchstaben
inhalt = lower(get(handles.suchFeld, 'string'));
%Wenn das Feld leer ist, wird beim Enter drücken die ganze Liste
%reingeschrieben.
ifisempty(inhalt) set(handles.funktionenListe,'string', Functions);
%Wenn was drin steht wird die Liste durchsucht
else
%Setze list und flush die anderen Variablen
list = get(handles.funktionenListe, 'string');
liste = {};
set(handles.funktionenListe,'string', ' ');
set(handles.funktionenListe,'Value', 1);
%Mach aus jedem Großbuchstaben einen Kleinbuchstaben und schreibe das
%in die zweite Spalte
for j=1:length(list)
list(j, 2) = lower(list(j, 1));
end
%Durchsuche die Liste; wenn ein Teilsrting übereinstimmt schreibe den
%Eintrag aus list nach Liste
for i = 1: length(list) if(~isempty(findstr(char(list(i, 2)), inhalt)))
liste(tmp, 1) = list(i, 1); %#ok<AGROW>
tmp = tmp + 1;
end
i = i + 1; %#ok<FXSET>
end
%Schreibe die neue Liste in das Feld
set(handles.funktionenListe,'string', liste);
set(handles.funktionenListe,'Value', 1);
end
Ich möchte das Ganze aber eleganter gestalten. D.h.: bei Eingabe eines Buchstabens, soll die Liste schongeürzt werden auf die Wörter, die diesen Buchstaben enthalten. Gibt man jetzt einen zweiten Buchstaben dazu, wird die Liste auf die Wörter mit dem enthaltenen Teilwort gekürzt, usw.
Löscht man alle Zeichen wieder, soll die ganze Liste erscheinen.
Was ich also möchte: Ich will nicht mehr mit Enter bestätigen sondern mit sämtlichen Zeichen, Backspace und Entfernen, sodass dieses Kürzen dem User dynamisch vorkommt, weil es alles sofort passiert und nicht erst nach der Bestätigung mit Enter.
Ich hoffe ihr könnt mir damit helfen.
Danke für die Antworten schonmal im Voraus.
Mit freundlichen Grüßen,
Ben
PS: bitte nicht über den Code schimpfen, ich weiß, der ist voll unelegant und schlecht xD
Verfasst am: 01.08.2013, 10:49
Titel: Re: Suchfeld und ListBox
Hallo benhuytom,
Zitat:
PS: bitte nicht über den Code schimpfen, ich weiß, der ist voll unelegant und schlecht xD
Das kann ich ohne Umschweife zurückgeben. Es verkleinert die Motivation zu antworten, wenn ein Fragesteller über seinen eigenen Code meckert. Das erzeugt nämlich den Eindruck, dass er mit etwas mehr Mühe in der Lage gewesen wäre ihn besser zu schreiben. Deswegen ist es eine alte Regel für Forums, beleidigende Selbstkritik unbedingt zu unterlassen. Zielführender wäre z.B.:
Zitat:
Ich nehme auch andere Ratschläge bzgl. des Codes gerne entgegen!
Aber nun zum Problem: Ein Edit-Field wird grundsätzlich erst mit Enter abgeschlossen. Also kannst Du kein normales Edit-Field verwenden. Stattdessen kannst Du eines erstellen, dessen "Enable"-Property auf "inactive" steht und die Tasten-Drücke per WindowsKeyPressFcn abfangen. Dann kannst Du den entsprechenden Buchstaben per Befehl in das Edit Feld schreiben: set(handles.EditH, 'String', ...)
Ausserdem hast Du dann nach jedem Tastendruck die Kontrolle über die gewünschten Reaktionen.
danke für die Antwort. Ja, die Sache mit dem Code.....war jetzt das erste mal, dass ich mit ner Gui in Matlab beschäftigt habe. Ich wollte erstmal, dass mein Code funktioniert und hab dabei nicht drauf geachtet, wie der Code nun ausschaut. Deswegen bin ich in der Hinischt nicht so überzeugt von meiner Arbeit gewesen.
Ich werde deinen Vorschlag in Zukunft beherzigen. Danke erstmal dafür^^
Danke auch fr die Lösung. Es funktioniert, zwar noch nicht perfekt, aber immerhin etwas.
Grüße
Benny
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
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.