Top > OOobbs3 > 35

OOobbs3/35 Edit

  • サマリ: ダイアログ上のオプションボタン押下時に別のテキストボックスのステータスを変化させたい。
  • 環境: Calc
  • 状態: 解決
  • 投稿者: Fir?
  • 投稿日: 2010-10-26 (火) 04:57:04

質問 Edit

数日前から拝見させて頂き、勉強しつつコツコツとマクロを作ろうとしております。

概要としては、Calcのシート上のフォームボタンからダイアログ(非アクティブのテキストボックスと2種のオプションボックス「ON」と「OFF」を配置)を表示し、「ON」のオプションボックスを選択した時にテキストボックスをアクティブ状態にしたい、といったものです。

オプションボックスのイベント等、試行錯誤してみたものの、ダイアログ表示後にステータスを変える事ができず・・・。 どなたかご教授願います。

回答 Edit

  • 次のようにします。

以下のようなプロシージャを作成しておき、ダイアログエディタでオプションボタンのイベントの「ステータスが変更されたとき」に割り当てます。以下のものは ON のときのものです。OFF のものは別のプロシージャにします。

Sub OptionButton_itemStateChanged(ev)
  ' Source 要素はイベントが発生したコントロール
  ' getContext メソッドで取得されるのは、そのコントロールの配置されている親コンテナオブジェクト
  ' この場合にはダイアログオブジェクト
  oDlg = ev.Source.getContext() 
  oDlg.getControl("TextField1").getModel().Enabled = True
End Sub

同じプロシージャで切り替えたい場合にはイベントのソース Source オブジェクトが割り当てられたコントロールのうちどれなのか、を判定しなければいけません。もしくは、両方のオプションボタンの状態を取得して判定します。

複雑でない場合には次のようにするといいと思います。オプションボタンの状態はコントロールから getState メソッドで取得したときには boolean 型なのに対して、モデルから State プロパティを参照して調べると short (Basic では Integer ?) 型なので注意が必要です。

If oDlg.getControl("OptionButton_OK").getModel().State = 1 Then
  oDlg.getControl("TextField1").getModel().Enabled = True
Else
  oDlg.getControl("TextField1").getModel().Enabled = False
End If

動的に追加されたコントロールなどでは Tag プロパティに情報を入れておいて判定するのがいいようです。

  • はにゃ? 2010-10-26 (火) 11:26:42

感想,コメント,メモ Edit

  • 迅速な回答ありがとうございます!凄く分かり易い解説で助かりました。早速試してみます! -- Fir 2010-10-27 (水) 00:51:17
  • ご回答頂いた通り、うまくいきました。ありがとうございました。 -- Fir 2010-10-31 (日) 20:24:01


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes