Hallo. Ich frage mich, ob es eine praktische Methode für eine Schaltflächenbox gibt, irgendwie zu wissen, wo sie innerhalb einer Aufstellungsbox liegt. Meine Besonderheiten:
JMP Pro 16.2.0
Ich habe ein Skript, das ein Fenster mit einer LineUp-Box erstellt. In jeder Zelle gibt es ein Schaltflächenfeld, in dem ich eine andere Aktion ausführen möchte, je nachdem, in welcher Spalte die Schaltfläche angezeigt wird. Zum Beispiel:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i],
//Insert code for the button to somehow identify which button it is within lub.
Speak(list2[i])
);
lub << Append(tb);
lub << Append(bb);
);
New Window("Test", lub);Wenn ich das Skript so ausführe, wie es ist, erhalte ich:

Aber wenn ich auf eine der Schaltflächen klicke, erhalte ich die Fehlermeldung:
„Indexbereich beim Zugriff oder bei der Auswertung von ‚list2[ /*###*/i]‘ , list2[/*###*/I]“
Ich verstehe diesen Fehler, weil es für die Schaltflächenbox keine Möglichkeit gibt, sich bei der Ausführung an den Wert von „i“ zu erinnern. Meine Frage: Gibt es eine Methode, die ich verwenden könnte, die es dem Schaltflächenfeld ermöglichen würde, beim Drücken „selbst zu identifizieren“, wo es im Ausrichtungsfeld liegt, und diesen Wert als List2-Index im Schaltflächenskript zu verwenden?
Ich verwende derzeit JSL Quotes und den Substitute-Befehl, um die Schaltflächen zu erstellen. In diesem Fall schreibe ich den Inhalt der For-Schleife als JSL-Anführungszeichen und ersetze ihn durch den Wert von i und dann durch Eval(Parse()). Das ist allerdings umständlich und ich frage mich, ob es einen besseren Weg gibt, wie den Befehl „bb << Standort abrufen“ oder „bb << Geschwister zählen“. Diese Befehle gibt es natürlich nicht, aber vielleicht gibt es eine andere Technik?
Danke!
Danke! Dies ist eine noch elegantere Lösung.
Als Antwort auf die ursprüngliche Frage des OP lautet die Antwort „Ja“ und sie ist ziemlich einfach.Hier ist ein Beispiel:
Names Default to Here(1);
list = {"cat", "dog", "mouse", "kangaroo", "sloth"};
list2 = {"meow", "bark", "squeak", "hop", "zzz"};
lub = LineUpBox(NCol(2), Spacing(5));
For(i=1, i<=NItems(list), i++,
tb = TextBox(list[i]);
bb = ButtonBox(list2[i], <<SET function=""></SET>Hallo Jarmo. Die Eval Insert/Eval Expr/Parse Combo ähnelt der JSLQuote/Substitute/Parse Combo, die ich derzeit verwende. Aber die anderen von Ihnen bereitgestellten Lösungen waren genau das, wonach ich gesucht habe. Danke!
Ich kenne keine direkte Methode zum Ermitteln des Standorts, aber Sie könnten den „Standort“ berechnen oder das Wissen einfügen, mit dem Sie klicken können Fügen Sie einen Ausdruck in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden . Sie können auch << get button name verwenden, um den Text der Schaltfläche abzurufen. oder << prev sib mit korrekter Referenz, um Text im Textfeld zu erhalten; Sie könnten den Text im Tooltip der Schaltfläche (oder im Index) „ausblenden“ ... und es gibt viele weitere Optionen, je nachdem, was Sie tun möchten und wie Sie es tun möchten.
Mehr sehen...