このブログを検索

2012年8月31日金曜日

【GUIビルダー】テキストボックス入力・表示(3)

■かなり苦労したのです

   昨日と一昨日に亘って書いた、テキストボックスに入力した内容を表示するという
   スクリプト。
   完成に行きつくまでにか~~~な~~~~り~~~~~苦労したのです(;´・д・)

   それは、一昨日の投稿でも書きましたが、参考にしたスクリプトを、そのまま書いてある
   スクリプトとGUIを忠実に作成してもきちんと動かないという事態に陥ったため。

 
   今日は、エラーの内容とその解決編についてです。


■こんなエラーでした

   丸3日程、下記のような状態で、どうにもこうにも先に進まず頭を抱えていました。

   名前をテキストボックスに入力し、Clickボタンを押しても・・・


   「undefined さん、こんにちわ!」と表示されます。
   
   私には、ちゃんとした「松田優香」という名前があるっちゅーねん!!!



   ボタンも機能しているし、メッセージは表示されているので、問題は、

      ”var txt = e.parameter.TextBox1;”

   という構文で、正しく入力された値を取得できていないことは明白です。


■解決策は2つ

   この状態を打開するには、次の2つのことが必要でした。

        ①GUIビルダーで”Panel”を配置すること

       ②GUIビルダーで配置したテキストボックスのプロパティ内、
        「フォーム」の中にある「名前」に”TextBox1”と記入すること


   ①については、参考にしたサイトの一つに、次のような記述がありました。
    
addCallbackElement(panel1)で引数をパネルに設定している。ここがミソで、こうするとパネルに乗っかっているコントロールの全ての値がイベントハンドラであるsubmit(e)のeに入ってくる。
      (引用:   http://blache90.tumblr.com/post/7195167628

   テストしてみましたが、確かにパネルの有無で、「undifined」となるか否かが変わります。


   次に、②について。
   きっかけになったのは、下記の掲示板サイトです。

      【stackoverflow】
       http://stackoverflow.com/questions/10627839/gui-not-passing-values-to-spreadsheet


   この一番下にある書き込みに、「IDだけではなく、フォーム属性の<名前>もきちんと
   記入していることを確認!」というような内容がありました。

   そこで、テキストボックスのプロパティで<名前>の箇所に”TextBox1”と記入すると、
   やっと”undefined”の文字が消えてくれたのです。

   
   ”app.addCallbackElement()”や、”app.addClickHandler()”といったスクリプトは、
   ()の中にGUIの部品の【ID】を記入しますが、
   ”e.parameter”のあとの”.(ピリオド)”には、GUIの部品の【名前】を書くのですね。


■予約編

   明日は、テキストボックスに入力された値を、スプレッドシートに記載されるようにしてみたいと
   思います。