Lokale Bereiche einhaltenIch versuche, ein Framework zur Visualisierung von Daten zu erstellen. Dies führt mich dazu, eine Vorlage mit mehreren Schaltflächen zu erstellen, die sich auf die Daten auswirken kann, die in die Vorlage eingegeben wurden.
Ich bin jedoch auf ein Problem mit dem Scoping gestoßen, bei dem das Erstellen einer Schaltfläche mit einer aufzurufenden Funktion erfolgt. Das Aufrufen dieser Funktion geschieht in einem anderen Bereich als in dem Bereich, in dem ich aufgrund der Position der Schaltfläche im Code gedacht hätte.
Ich habe hier ein Mindestarbeitsbeispiel gegeben - ich würde erwarten, dass der resultierende Funktionsaufruf beim Klicken auf jede Schaltfläche innerhalb des ursprünglichen Definitionsbereichs stattfinden würde.
Gibt es eine Möglichkeit, dies zu erreichen?
Vielen Dank!
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << Add ( "Added", msg )
);
tab_function = Function({msg}, {Default Local},
Tab Box (
"one",
tb1 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb1, msg))
);,
"two",
tb2 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb2, msg))
);,
"three",
tb3 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb3, msg))
);
)
);
New Window(
"Test Window",
tab_function("hi");
)Re: Halten Sie lokale BereicheBeachten Sie im vorherigen Skript, dass die Funktion insert_text auf die Tab, tb und die msg, msg verweist. Die << Set-Funktion übergibt die Referenz (diese) an die Schaltfläche, und Sie können auf die übergeordnete VListBox oder auf die übergeordnete << übergeordnete Registerkarte, die Registerkarte, verweisen.
Zunächst würde ich keine Funktion verwenden, um die Registerkarten zu erstellen. Ich habe das Skript so geändert, dass es Registerkartenseiten verwendet, und ich erstelle eine oder mehrere Variablen. Beachten Sie, da Sie eine Funktion verwenden. Wenn Sie alle Variablen angeben, aber msg sind lokal, sind die Variablenreferenzen nach der Ausführung von tab_function unbekannt. Ich habe unsere {Default Local} kommentiert; unkommentieren, um die Fehler zu sehen.
Ich habe die Funktion insert_text geändert, um zu zeigen, dass das Skript weiß, welche Tab-Schaltfläche gedrückt wurde, und Sie können Informationen zu dieser Registerkarte erhalten. Testen Sie die Schaltflächen der einzelnen Registerkarten.
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << select;
str = tb << get title;
str = "I am on tab " || str || " with message " || msg;
Caption(str); wait(2); Caption(remove);
tb << Append (TextBox( msg ));
tb << deselect;
);
tab_function = Function({msglist}, //{Default Local},
Eval(Eval Expr(
mytb= Tab Box (
tb1=Tab Page Box( "one",
V List Box(
b = Button Box ( "Add", insert_text(tb1, expr(msglist[1])) )
)
),
tb2 =Tab Page Box( "two",
V List Box(
b = Button Box ( "Add", insert_text(tb2, expr(msglist[2])) )
)
),
tb3=Tab Page Box("three",
V List Box(
b = Button Box ( "Add", insert_text(tb3, expr(msglist[3])) )
)
)
)
) )
);
New Window(
"Test Window",
tab_function({"hi","stay awhile", "goodbye"} );
);
//this command with throw an error with {Default Local}...once the tab_function runs tb1, etc are unknown
show( mytb << class name, tb2<<GET title=""></GET>Re: Halten Sie lokale BereicheDanke fürs Helfen! Dies ist jedoch nicht genau das, wonach ich suche - ich muss in der Lage sein, aus der Funktion "insert_text" lokal auf "tab_function" zu verweisen, indem ich einen Verweis auf diese Variable in die Funktion "insert_text" übergibt.
Re: Halten Sie lokale BereicheIch bin nicht sicher, was Sie zu tun versuchen. Aber das ist meine beste Vermutung. Ich habe ein paar Dinge geändert.
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << select;
Caption(msg); wait(2); Caption(remove);
tb << Sib Append (TextBox( msg ));
tb << deselect;
);
tab_function = Function({msg}, {Default Local},
Eval(Eval Expr(
Tab Box (
"one",
V List Box(
b = Button Box ( "Add",
<<SET function=""></SET>