Toggle Button durch for schleife aktivieren/deaktivieren
Jonzi
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.09.2010, 16:13
Titel: Toggle Button durch for schleife aktivieren/deaktivieren
Hey,
ich hab folgendes Problem. Ich versuche 16 Toggle Buttons mit einem Toggle Button zu Deaktivieren, wenn dieser gedrückt wird oder zu aktivieren wenn er wieder gedrückt wird.
Dies würde ich gerne mit einer for schleife realisieren. Da bisher sonst ich immer jedes einzelne Toggle Button handle ansteuere.
hier ist mal der auschnnit von meinem Code
Code:
%Programm
% --- Executes on button press in togall. function togall_Callback(hObject, eventdata, handles) % hObject handle to togall (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of togall ifget(hObject,'Value')== 1
tog1-tog16 sind die anderen toggle buttons. ich würde gerne nicht 16mal set(...) hinschreiben müssen, sondern dass es mit einer vorschleife geht also z.B
ALLERDINGS wuerde ich es nicht so machen, da es rel. langsam ist.
Mein Vorschlag: Wenn du das Tag der togglebuttons angibst, dann speichere einen markanten String oder eine Zahl unter "UserData" bei den Togglebuttons ab, die du im Programm ausblenden moechtest. Ich leg hier mal den String "Ausblenden" fest. Nun kannst du mit:
Nicht im Allgemeinen. Wenn ich 20 Figures offen habe, auf denen jeweils 12 Axes mit je 20 Linien offen sind, sind das 5040 handles, die durchsucht werden müssen. Jeweils wird der Style verglichen. Das dauert lange.
Wenn man dagegen die handles statt in 'tog1', 'tog2' etc gleich in einem Array gespeichert hätte: 'tog(1)', 'tog(2)' etc wäre das ganz einfach. Ein weiteres schönes Beispiel dafür, dass man viel effizienter programmieren kann, wenn man nicht die Datenstruktur (also die Variablen-Namen) mit den Werten (hier die Zuordnung von Index zu Handle) vermischt.
Andere Lösung, wenn die entsprechenden Felder im handles-Strukt eindeutig erkannt werden können:
Code:
Field = fieldnames(handles);
Data = struct2cell(handles);
Index = strncmp(Field, 'tog', 3);
set([Data{Index}], 'Enable', 'off');
ok wenn es um Timing-dinge geht bist du wohl der Experte hier, wobei mich wirklich mal interessieren wuerde wo du all dieses doch sehr spezifische Wissen her hasst (ich bin immer wieder beeindruckt ). Dies aber nur am Rande...
Ansonsten find ich deine Loesung sehr gut, auch wenn ich zuvor eben erst den toc Array bilden muss. Da muesste man halt wissen ab wann (anzahl der objecte) welche Methode schneller ist?
ganz einfach: Probieren, probieren, probieren, probieren. :-)
Und einige Jahre Austausch in der CSSM-Newsgroup.
Die lange Liste von SET-Kommandos von Jonzi ist zwar nicht optimal oder hübsch, aber sie läuft immerhin unter allen Bedingungen in fast der selben Zeit (wohl wenige micro-Sekunden!).
Selbst wenn es länger wäre: Ein Benutzer gewöhnt sich sehr schnell daran, dass die Reaktion auf das Klicken 0.3 Sekunden dauert. Auch wenn es jedesmal 2.0 Sekunden braucht, gerät der Benutzer noch nicht in Stress. Falls die Zeiten aber zwischen 0.1 und 2 Sekunden schwanken, beginnt die Panik-Spirale:
1. der Nutzer klickt mehrfach, weil er denkt, das erstemal sei irgendwie daneben gegangen (als ob es sowas auf dem Computer gäbe!).
2. Die wiederholten Klicks heben ihre Wirkung gegenseitig auf.
3. Der 3- und 4-fach Klick wird versucht.
4. Stress. Der Nutzer beginnt das Handbuch zu lesen.
5. Darin findet er Fehler und fragt beim Support nach.
6. Der Support bereinigt den Bug, baut dabei aber 2 neue ein.
danke euch beiden recht Herzlich für die Lösungsvorschläge. Ich habe auch schon an die Lösung von Jan mit dem array gedacht, aber nie hinbekommen. Aber ich werde jetzt gleich mal das mit dem Array ausprobieren und gebe euch dann auch bescheid ob es geklappt hat!
Danke für die Hilfe und die super lösungen! !
Gruß
Jonzi
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.