Skip to main content
ASKST
Inspiring
February 20, 2024
Answered

ダイアログとボタン(onClick)の仕様・処理について

  • February 20, 2024
  • 2 replies
  • 491 views

試しに複数個のボタンがあるダイアログを出してみたのですが、全く同じ処理なのにキャンセルしか動作しません。思いつく限り試したのですが原因不明です。
どこが良くないのでしょうか。
環境:macOS Sonoma 14.2.1

#target "illustrator"

//ダイアログの設定
var testdialog = new Window("dialog","タイトル",[0,0,350,150]);

testdialog.add ("statictext", [50,7,450,30], "テキスト");
var Button_a = testdialog.add("button",[10,35,220,65],"A",{name:'a'});
var Button_b = testdialog.add("button",[230,35,340,65],"B",{name:'b'});
var Button_c = testdialog.add("button",[10,75,220,105],"C",{name:'c'});
var Button_cancel = testdialog.add("button",[135,115,215,140],"cancel",{name:'cancel'});

//ダイアログ表示位置を中心に移動
testdialog.center();

//ダイアログの表示
testdialog.show();

Button_a.onClick = function(){testdialog.close();};
Button_b.onClick = function(){testdialog.close();};
Button_c.onClick = function(){testdialog.close();};
Button_cancel.onClick = function(){testdialog.close();};

 

 

This topic has been closed for replies.
Correct answer Uske_S

ScriptUIのdialogでは、show() メソッドで処理が一旦止まります。

なので、基本的に show() メソッドよりも手前で onClick を定義してください。

show() メソッドが onClick の後にくれば正しく動作します。

 

一方で、cancel と ok を name プロパティに指定すると、特別に動作させることができますが、それぞれ1つまでしか設定できない(ほかは無視される)ので、name プロパティがなんであれ、dialogの場合は show() メソッドの前にすべての onClick を定義する、ということでよろしいかと思います。

2 replies

Uske_S
Community Expert
Uske_SCommunity ExpertCorrect answer
Community Expert
February 20, 2024

ScriptUIのdialogでは、show() メソッドで処理が一旦止まります。

なので、基本的に show() メソッドよりも手前で onClick を定義してください。

show() メソッドが onClick の後にくれば正しく動作します。

 

一方で、cancel と ok を name プロパティに指定すると、特別に動作させることができますが、それぞれ1つまでしか設定できない(ほかは無視される)ので、name プロパティがなんであれ、dialogの場合は show() メソッドの前にすべての onClick を定義する、ということでよろしいかと思います。

Uske_S
ASKST
ASKSTAuthor
Inspiring
February 21, 2024

回答ありがとうございます。

記述順を変更してみると確かに動作しました。

ありがとうございました。

Ten A
Community Expert
Community Expert
February 20, 2024

dialogでは名前がcancel又はokでないと反応しなかったかと。paletteだと反応するかと思います。

ASKST
ASKSTAuthor
Inspiring
February 21, 2024

回答ありがとうございます。
確かにnameによって挙動が定義されていることを確認しました。
paletteも検証してみます。