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

Suchfeld und ListBox

 

benhuytom
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2013, 16:37     Titel: Suchfeld und ListBox
  Antworten mit Zitat      
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.
if isempty(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
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.08.2013, 10:49     Titel: Re: Suchfeld und ListBox
  Antworten mit Zitat      
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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
benhuytom
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 19.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2013, 11:31     Titel:
  Antworten mit Zitat      
Heyho Jan,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 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.