あなたはそれほど遠くありません...しかしそれを機能させるのに十分な距離ではありません...
Ui要素の値は、ハンドラーに追加されるいわゆるcallbackelementでハンドラー関数に送信されます。このcallbackelementは、ボタン、ラベル、またはより簡単に言えば、他のすべてのウィジェットを含む親ウィジェットにすることができます。これらの「要素」はハンドラー関数の「e」にあり、名前で識別されます。
別の方向、つまり、別の関数からUi要素を変更する必要がある場合は、この要素をID(getElementbyId()
)で取得し、UI定義関数で行うのと同じ方法で値を割り当てることができます。
別の投稿からサンプルコードをコピーして貼り付けて、私が言ったことを説明しe.parameter.chkmode
ます。チェックボックスの値を保持するが表示され、逆のプロセスを示すラベルを追加します(ボタンがクリックされるとテキストが変更されます) 。
私が十分に明確であることを願って、
var sh = SpreadsheetApp.getActiveSheet();
var ss = SpreadsheetApp.getActiveSpreadsheet();
//
function move() {
var app = UiApp.createApplication().setTitle("move test")
.setHeight(100).setWidth(400).setStyleAttribute("background-color","beige");
var panel = app.createVerticalPanel();
var next = app.createButton('next').setWidth('180');
var chkmode = app.createCheckBox("moving mode (checked = up/dwn, unchecked=L/R)").setValue(false).setName('chkmode');
var label = app.createLabel("test Label with text that will be modified on click").setId('label');
panel.add(next).add(chkmode).add(label);
var handler = app.createServerHandler('click').addCallbackElement(panel);
next.addClickHandler(handler);
app.add(panel);
ss.show(app);
}
//
function click(e) {
var app = UiApp.getActiveApplication();
var activeline = sh.getActiveRange().getRow();// get the row number of the selected cell/range
var activecol = sh.getActiveRange().getColumn();// get the row number of the selected cell/range
var label = app.getElementById('label');
label.setText('You have clicked the button');
var chkmode=e.parameter.chkmode;
if(chkmode=="true"){
activeline++
}else{
activecol++}
var sel=sh.getRange(activeline,activecol);
sh.setActiveSelection(sel);// make the next row active
return app;
}