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

scrollbarer Tab

 

BlackDice
Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 29.03.2021, 14:06     Titel: scrollbarer Tab
  Antworten mit Zitat      
Moin zusammen,

ich habe mir einen Tab gebaut in dem über einen Spinner eine gewisse Anzahl von Button angezeigt werden. Wenn ich mir jetzt nur drei Buttons anzeigen lasse wie auf dem Screenshot kann ich trotzdem bis ganz nach unten scrollen zum 20 Button scrollen den ich mit "Visible = 'off'" ausgeblendet habe.

Gibt es sonst noch eine andere Möglichkeit GUI Elemente auszublenden, zu löschen und wenn sie gebraucht werden wieder zu erzeugen?

scroll.JPG
 Beschreibung:

Download
 Dateiname:  scroll.JPG
 Dateigröße:  13.24 KB
 Heruntergeladen:  212 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.03.2021, 14:50     Titel:
  Antworten mit Zitat      
Hallo,

mit dem Befehl uibutton die Buttons nach Bedarf erstellen und mit delete löschen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 29.03.2021, 19:50     Titel:
  Antworten mit Zitat      
Danke. Das erstellen hat soweit geklappt nur beim löschen klappt das nicht so richtig:
Code:
           value = app.Spinner.Value;
           
            for v = 1:1:value
                Messung_Panel(v) = uipanel(app.Tab_2,'Position',[0 0+160*v 348 155]);
            end
           
            for v = value+1:1:20
                delete Messung_Panel(v)
            end


Viele grüße
Fabian
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 29.03.2021, 20:33     Titel:
  Antworten mit Zitat      
Müsste die zweite for-Anweisung nicht genauso von 1 bis Value laufen?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 29.03.2021, 22:01     Titel:
  Antworten mit Zitat      
Das macht die Schleife auch. Die Variable wird aber nicht gefunden. Ich habe auch schon verschiedene Klammern getestet. Leider kein Erfolg.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.03.2021, 22:25     Titel:
  Antworten mit Zitat      
Hallo,

wenn, dann
Code:
delete(Messung_Panel(v))


Dazu muss das Objekt aber vorher angelegt worden sein.
Damit du nicht den Zugriff auf die Objekte verlierst, würde ich sie als Eigenschaft in der App ablegen.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 30.03.2021, 08:38     Titel:
  Antworten mit Zitat      
Moin, egal ob ich "Messung_Panel" als public oder private property setzte bekomme ic folgenden Fehler:
Code:
Index exceeds the number of array elements (2).


Code:
           value = app.Spinner.Value;
           
            for v = 1:1:value
                app.Messung_Panel(v) = uipanel(app.Tab_2,'Position',[0 0+160*v 348 155]);
            end
           
            for v = value+1:1:20
                delete (app.Messung_Panel(v))
            end


Edit: ok ich glaube ich habe einen Fehler gefunden. Wenn ich 20 Panels erstelle und dann mit dem Spinner zurück auf 19 gehe wird Panel 20 gelöscht. Den Fehler gibt es dann erst wenn ich auch 18 runtergehe weil es dann Panel 20 nicht mehr gibt. Hat jemand da eine Idee wie ich die For Schleife ändern kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2021, 10:58     Titel:
  Antworten mit Zitat      
Hallo,

du kannst z.B. die Anzahl der Panels in einer Variable speichern und diese Variable statt 20 verwenden.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 30.03.2021, 11:57     Titel:
  Antworten mit Zitat      
Moin irgendwie stehe ich grad auf dem Schlauch.

Das ich die obere Grenze Variabel mache macht ja sinn. Hätte ich dann aber nicht immer noch das Problem, dass ich zuvor erstellte Panels nicht löschen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2021, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

ich wüsste nicht, warum es da ein Problem geben sollte. Ich kann dir nur raten, es auszuprobieren und Bescheid zu geben, falls es konkrete Probleme geben sollte. Dann bitte dazu schreiben, welche Fehlermeldung in welcher Zeile auftritt.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 30.03.2021, 14:21     Titel:
  Antworten mit Zitat      
Ich weiß jetzt nicht ob du das dir so gedacht hast mit der Anzahl der Panels als Variable speichern:
Code:
           value = app.Spinner.Value;
           
            for v = 1:1:value
                app.Messung_Panel(v) = uipanel(app.Tab_2,'Position',[0 0+6*v 348 5]); %160 155
            end
            x = v;
           
            for v = value:1:x
                delete (app.Messung_Panel(v))
            end



Allerdings habe ich hier ja auch das Problem, dass ich ja nicht weiß wie viele Panels erstellt wurden um diese zu löschen.
Eine Fehlermeldung wird hier nicht ausgespuckt nur die zweite for Schleife funktioniert nicht wie ich mir das vorstelle.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2021, 15:32     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
nur die zweite for Schleife funktioniert nicht wie ich mir das vorstelle.

Och bitte... was heißt das denn nun? Wird etwas gelöscht, was nicht gelöscht werden soll? Oder wird etwas nicht gelöscht, das gelöscht werden soll? Ich kann mir zwar vorstellen, was du möchtest, aber mangels vollständigem Beispiel nur erahnen, wie das Verhalten von deiner Vorstellung abweicht.

Probleme auf jeden Fall:
Du musst dir diese Variable für den nächsten Durchlauf speichern.
Zudem ist es nicht sinnvoll, Panels zu erstellen, die vom letzten Durchlauf noch da sind.
Insgesamt also eher so:

Code:
for v = lastValue+1:value
        app.Messung_Panel(v) = uipanel(app.Tab_2,'Position',[0 0+6*v 348 5]);
end

for v = x+1:lastValue
delete (app.Messung_Panel(v))
app.Messung_Panel(v) = []; % zudem Eintrag entfernen
end
app.lastValue = value;


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.03.2021, 15:32     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
nur die zweite for Schleife funktioniert nicht wie ich mir das vorstelle.

Och bitte... was heißt das denn nun? Wird etwas gelöscht, was nicht gelöscht werden soll? Oder wird etwas nicht gelöscht, das gelöscht werden soll? Ich kann mir zwar vorstellen, was du möchtest, aber mangels vollständigem Beispiel nur erahnen, wie das Verhalten von deiner Vorstellung abweicht.

Probleme auf jeden Fall:
Du musst dir diese Variable für den nächsten Durchlauf speichern.
Zudem ist es nicht sinnvoll, Panels zu erstellen, die vom letzten Durchlauf noch da sind.
Insgesamt also eher so:

Code:
for v = lastValue+1:value
        app.Messung_Panel(v) = uipanel(app.Tab_2,'Position',[0 0+6*v 348 5]);
end

for v = x+1:lastValue
delete (app.Messung_Panel(v))
app.Messung_Panel(v) = []; % zudem Eintrag entfernen
end
app.lastValue = value;


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDice
Themenstarter

Forum-Century

Forum-Century


Beiträge: 148
Anmeldedatum: 08.12.20
Wohnort: ---
Version: R2020b
     Beitrag Verfasst am: 31.03.2021, 08:46     Titel:
  Antworten mit Zitat      
Moin Harald, danke für die ganze Hilfe.

Ich möchte durch einen Spinner die Anzahl der erzeugten Panels einstellen. Das soll durch benutzten der Pfeile auf der rechten Seite und durch eintragen einer Zahl möglich sein. Wenn die Zahl niedriger ist als die vorherige sollen die nicht gebrauchten Panels gelöscht werden. Also wenn ich mit dem Spinner oder per Eingabe eine 10 eintrage sollen 10 Panels erzeugt werden. Wenn ich dann mit dem Spinner oder per Eingabe eine 3 eintrage sollen die anderen 7 gelöscht werden.

Mit dem Programm kann ich mit den Pfeilen die Panels erzeugen und löschen.

Code:
   properties (Access = public)
        Messung_Panel
        lastValue = 0
        x = 0
    end

        function SpinnerValueChanged(app, event)
            value = app.Spinner.Value;
           
            for v = app.lastValue+1:value
                app.Messung_Panel(v) = uipanel(app.Tab_2,'Position',[0 0+6*v 348 5]);
            end
           
            for v = value+1:app.lastValue
                delete (app.Messung_Panel(v))
                app.Messung_Panel(v) = []; % zudem Eintrag entfernen
            end
           
            app.lastValue = value;


Wenn ich aber wie im Beispiel per Eingabe 10 eintrage und dann eine 3 eintrage bekomme ich in der delete Zeile folgenden Fehler:

Code:
Index exceeds the number of array elements (6).




Edit: wenn ich den Eintrag:
Code:
app.Messung_Panel(v) = []; % zudem Eintrag entfernen

entferne klappt das alles. Was für Einträge sollen denn da gelöscht werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.03.2021, 10:04     Titel:
  Antworten mit Zitat      
Hallo,

du speicherst ja Verweise auf die Panels ab. Wenn du die Einträge nicht löscht, speicherst du noch Verweise auf Panels ab, die es gar nicht mehr gibt.
Problem ist, dass durch das Setzen auf [] die anderen Panels "nachrutschen". So sollte es passen:
Code:
for v = app.lastValue:-1:value+1
       delete (app.Messung_Panel(v))
       app.Messung_Panel(v) = []; % zudem Eintrag entfernen
end


Dann bräuchte man lastValue nicht mal speichern, sondern könnte length(app.Messung_Panel) verwenden.

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