Top > OOobbs > 66

OOobbs/66 Edit

  • サマリ: 複数のOptionButtonの判別
  • 環境: Calc
  • 状態: 解決
  • 投稿者: Kuma?
  • 投稿日: 2005-05-08 (日) 12:45:40

質問 Edit

LinuxでOOo1.1.2を使用しています。オプション(ラジオ)ボタンの取扱いについてご教示お願いいたします。

シートにオプションボタン3個(同一グループとして機能させたい)を設置しました。デザインモードにして選択右クリックで、コントロール-->全般タグと進み、名前欄にそれぞれ『Option1』『Option2』『Option3』と記入し、順序欄の数値は全て0に統一(グループ0の意味)しました。

この状態で、デザインモードをOFFにしオプションボタンを選択すると、3個共に全て選択状態になってしまいました。この事から順序欄の0と言う統一値はグループ化の判断には無関係で有ることが分かりました。

そこで名前欄を3個共全て『Option1』に統一してデザインモードOFFで選択をしてみると、3個のうち選択した1個だけに●マークが付き、グループ化の目的が達成出来ました。

オプションボタンが選択状態に有るか否かの判断は、Basicでは『state』プロパティで出来る事は分かりましたが、この3個のオプションボタンの名前が皆同じ為、何れが選択されているのかを判断する方法が分かりません。宣しくお願い致します。 コードは下記に示す様に作成しています。

Sub Option_Buttun_Click
  oSheet=ThisComponent.Sheets("表1")
  oDraw=oSheet.DrawPage
  oForm=oDraw.Forms("Standard")
  oOpt=oForm.getByName("Option1")
  if oOpt.state=1 AND oOpt.??? then msgbox "1番目が選択"
  if oOpt.state=1 AND oOpt.??? then msgbox "2番目が選択"
  if oOpt.state=1 AND oOpt.??? then msgbox "3番目が選択"
End Sub

回答 Edit

  • うーんどうやるんでしょう。

一応,インデックスによってオプションボタンコントロールのオブジェクトが別々に取得できたので,getByIndex によってそれぞれのオプションボタンコントロールのオブジェクトを取得して State プロパティーで判断できます。

もっと華麗な方法はないんでしょうか?

  • はにゃ?? 2005-05-08 (日) 19:09:03

はにゃさん、ご回答有難う御座います。早速下記のようにコーディングを変更しましたら、出来ました。

 oForm=oDraw.Forms("Standard")
 'oOpt=oForm.getByName("Option1") <----変更後、これは意味が無くなった。
 opt0=oForm.getByIndex(0)
 opt1=oForm.getByIndex(1)
 opt2=oForm.getByIndex(2)
 if opt0.state=1 then msgbox "0 is selected"
 if opt1.state=1 then msgbox "1 is selected"
 if opt2.state=1 then msgbox "2 is selected"  

上記の方法は、シート上にオブジェクトとしてオプションボタン3個しか無い場合は良いのですが、オプションボタンを設置する前にプッシュボタン等他のオブジェクトを設置しているとgetByIndex(0)が他のオブジェクトを取得してしまいダメでした。

何のオブジェクトを取得したのかを判断する方法として、例えばgetByIndex(0)が何なのかは MsgBox opt0.Name 、MsgBox opt1.Name 、MsgBox opt2.Name を行うと、オプションボタン以外のオブジェクトに付けた名前が表示されるので判断出来ました。

ところが、3個のオプションボタンの内どれがopt0,opt1,opt2として認識されているのかは、Nameプロパティ実行結果が全て『Option1』となってしまうので分かりません。やむを得ず、シート上のオプションボタンを1個ずつ選択を行ってメッセージを出して確認をしました。この方法はシート上のオブジェクト数が少ない場合は可能ですが、数が多くなると確認作業の手間が大変です。

そこでオプションボタンのタイトルを取得することが出来ればオプションボタンも個々の区別がプログラム上のMsgBoxのみで調べる事が出来そうだと思いました。 このタイトルを取得するプロパティまたはメソッドは有るのでしょうか?

  • オプションボタンのタイトル (ラベル) を取得するには Label プロパティーを使用できます。

fileOptionButton.sxc

  • はにゃ?? 2005-05-08 (日) 21:29:11
  • うーん,どうでもいいことなんですが,Kuma さんは一文が長く表示されがちですね。PukiWiki では改行だけではだめで,空行を入れることで段落を変更することができますよ。 -- はにゃ?? 2005-05-08 (日) 21:31:38
  • はにゃさん、早速のご回答有難う御座いました。御指摘の段落については以後注意します。オプションボタンの判断は、各オプションボタンのフォーカスイベントハンドラでグローバル変数g_opt_IDに値を下記のように入れて行う事でも対応できました。
global g_opt_ID as Integer

Sub opt_0_click 'オプションボタン0クリック
  g_opt_ID=1
End Sub
Sub opt_1_click 'オプションボタン1クリック
  g_opt_ID=2
End Sub
Sub opt_2_click 'オプションボタン2クリック
  g_opt_ID=3
End Sub

このg_opt_IDの値をを他のプログラム中で判断してどのオプションボタンがクリックされているかを知る様にしました。-- Kuma? 2005-05-08 (日) 21:41:16

  • オプションボタンなので「作動時」のイベントを使わずに「ステータスを変更した時」のイベントに割り当てるとより単純になりますよ。オプションボタンのコントロール属性の全般タブに「追加情報」という項目がありますので、そこにID値となる文字列をボタン毎に1〜3で書いておき、イベントタブには以下の「OptionButton_itemStateChanged」を割り当てて見て下さい。グループ内のボタン全てで1つのイベントを共有出来ます。
    global g_opt_ID as Integer
    
    ' オプションボタンが変更された時
    Sub OptionButton_itemStateChanged(oEvent)
      g_opt_ID = CInt(oEvent.Source.Model.Tag)
      MsgBox g_opt_ID
    End Sub

「追加情報」は、Model.Tagで取得できます。CInt関数でIntegerに変換して値として取得しています。ダイヤログマクロでも同様の方法は使えます。-- 河井? 2005-05-10 (火) 00:58:37

  • 河井さん、ご教示有難う御座います。少し難しい内容ですがスマートな方法の様ですのでチャレンジしてみます。 -- Kuma? 2005-05-10 (火) 22:21:23
  • 河井さんの方法で上手く出来ました、有難う御座いました。が、この方法で分からぬ事が一つ有りました。分からぬ事とは、引数の『oEvent』に何かを渡すような定義をした覚えが無いのに、この関数(関数名を変えてみても同じ様に機能した)にオブジェクトが渡されると言う現象です。 -- Kuma? 2005-05-15 (日) 20:42:58
  • どこかに書いたと思ったのですが見つかりませんでした。が,イベントとして割り当てたプロシージャはどうやらリスナーを使うときのような動作になります。そのためプロシージャの引数にオブジェクトを与えることができます。リスナーに関しては OOoBasic/Generic/listener を参考にしてください。 -- はにゃ?? 2005-05-15 (日) 23:39:40
  • はにゃさんの解説の通りです。自作マクロのリスナーイベントで書いてた関数名をそのまま持ってきてます。イベントの割り当てで使用する時は名前は自由に変えて構わないと思います。イベントリスナーで使用する時はオプションボタンの「ステータスを変更した時」のイベントはXItemListenerとなりますのでアンダースコア"_"以降の"itemStateChanged"の名称は固定となります。参考まで。 -- 河井? 2005-05-16 (月) 20:40:26
  • はにゃさん、河井さん、分かりやすい説明有り難うございます。OOoの「コントロールダイアログ」を使って河井さんの方法を適用すると、マニュアルでリスナーを作る場合と異なり、関数名(アンダースコア不要)と引数名(oEventで無くても大丈夫)は自由に設定出来る事を確認出来ました。そしてこの機能の根底は、はにゃさんが示して下さったOOoBasic/Generic/listenerの解説を読んで納得出来ました。どうも有り難うございました。-- Kuma? 2005-05-16 (月) 21:31:11


Attach file: fileOptionButton.sxc 1017 download [Information]

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