Kontrollkästchen zurücksetzenIch habe ein Skript, das ein Fenster mit Ankreuzfeldern, Kombinationsfeldern, Zahlenbearbeitungsfeldern und Textbearbeitungsfeldern verwendet, um Benutzereingaben zu übernehmen, und dann die Eingabe verwendet, um eine Analyse der Daten durchzuführen (siehe das angehängte Bild, wie das Kästchen aussieht). Zur Vereinfachung der Verwendung mit verschiedenen Optionssätzen habe ich einen Reset-Button hinzugefügt, der alle geöffneten Datentabellen und Berichte schließt und alle eingegebenen Optionen löscht. Normalerweise funktioniert die Schaltfläche ordnungsgemäß, aber manchmal wird ein Fehler angezeigt, wenn Sie versuchen, entweder das Kontrollkästchen für den einzelnen Datumsbereich oder das erste Textbearbeitungsfeld unter "NC-Codes eingeben" zurückzusetzen. In der Fehlermeldung wird "Send Expects Scriptable Object beim Zugriff oder bei der Auswertung von" Senden "angezeigt. Ich habe ein Bild der Alarmbox und der Optionen, die ich beim Auftreten des Fehlers ausgewählt hatte, beigefügt. Das angehängte Skript ist nur der betreffende Abschnitt. Es ist so eingerichtet, dass es das Dateneingabefeld erstellt, die eingegebenen Optionen abruft und es zurücksetzen und schließen kann. Ich bin mir nicht sicher, was mit dem einen Kontrollkästchen und dem Dateneingabefeld zu tun ist, da der Rest anscheinend richtig zurückgesetzt wird.


Re: Checkbox zurücksetzenBeachten Sie, dass jedes andere Skript oder jede Prozedur, die eine dieser Variablen verwendet, oder eine Tabelle, die einen Spaltennamen wie eine dieser Variablen enthalten kann, auch wenn sie nur wenige Sekunden geöffnet wäre, mit dem Anzeigeobjektnamen in Konflikt stehen kann.
Re: Checkbox zurücksetzenIch werde definitiv in Namensräume schauen. Wenn das Skript zweimal ausgeführt wurde, als der Fehler auftrat, denke ich, dass das, was Sie vorschlagen, das Problem lösen würde. Wenn Sie jedoch die Reset-Taste drücken, wird kein neues Eingabefenster generiert. Nur die Werte der Felder für die Daten werden auf die Standardwerte zurückgesetzt. Das und die Tatsache, dass der Fehler nur gelegentlich auftritt und nur bei einigen Checkboxen, führt zu der Annahme, dass möglicherweise mehr passiert.
Re: Checkbox zurücksetzenDiese Art von Fehler tritt auf, wenn das Objekt nicht mehr existiert oder wenn ein Problem mit dem Umfang (Namenskonflikt) vorliegt. Ich gehe davon aus, dass dies manchmal verursacht werden kann.
Ich kann diesen Fehler reproduzieren:
- Führen Sie Ihr Skript aus und legen Sie einige Werte fest
- Führen Sie Ihr Skript erneut aus
- Schließen Sie das 2. Dialogfenster
- Gehen Sie zum ersten Fenster und wählen Sie Zurücksetzen. Der Fehler tritt auf. Dies liegt daran, dass alle Anzeigefelder d1, d2 usw. dem 2. Dialogfenster zugewiesen wurden. Reset versucht, auf ein Objekt zuzugreifen, das nicht mehr existiert.
Mit einem Verweis auf dieses << oberste übergeordnete Element programmieren, dann das Objekt finden oder das Fensters Namescape verwenden. Fenster: d1, Fenster: d2 usw. wird das beheben.
Ein großer Vorteil beim Erstellen einer Anwendung besteht darin, dass jede Instanz ihren eigenen Namespace hat und das Skript einfacher macht.
Ein weiterer Ansatz besteht darin, an der Spitze Ihres Skripts hinzuzufügen Namensvorgabe für Hier (1); und speichern Sie es.
Schließen Sie alle Instanzen Ihres Dialogfensters.
Führen Sie nun dieses Skript aus (ändern Sie ggf. den Pfad)
Names Default to Here(1);
Include ("c:\temp\Reset Boxes Question Script.jsl", <<NEW context=""></NEW>Ändern Sie einige Werte im ersten Dialogfenster und schließen Sie dann das 2. Dialogfenster. Kehren Sie jetzt zum ersten Fenster zurück (wiederholen Sie einfach die Schritte, die den Fehler verursacht haben) und drücken Sie Reset. Keine Probleme.
Wenn Sie ein einzelnes Include () mit neuem Kontext verwenden, wird ein anonymer Namespace für den Diaolog und seine benannten Objekte erstellt, und das Scoping-Problem wird aufgelöst.
Sie sollten über Namespaces lesen.