Top > OOobbs > 54

OOobbs/54 Edit

  • サマリ: ダイアログ上のリストボックス or コンボボックスの選択中の値を別ボタン押下時に取得したい。
  • 環境: Calc
  • 状態: 解決
  • 投稿者: のの?
  • 投稿日: 2005-03-23 (水) 15:55:02

質問 Edit

最近、拝見させてもらい勉強しております。 Text、SelectedText、getItem、getText、getSelectedText等を使って試みたのですが、ことごとく失敗しました。どこをどうすれば良いのでしょうか。

回答 Edit

  • ダイアログ上のリストボックスまたはコンボボックスですね。

例として次のようなダイアログを考えました。

  • ドキュメントの "Standard" ライブラリに "Dialog1" という名前のダイアログを作成
  • "ListBox1" という名前のリストボックス
    • ボタン 1 をクリックすることで "ListBox1" で選択された項目を取得する
  • "ComboBox1" という名前のコンボボックス
    • ボタン 2 をクリックすることで "ComboBox1" で選択された項目を取得する

マクロは "Standard" ライブラリの "Module1" に次のようにしました。 (特に記述するモジュール名は関係ありません) コードの説明は後のほうに書きます。(例として作成したドキュメント filedialog_listbox.sxc)

REM  *****  BASIC  *****

Dim oDialog As Object
Dim oListBox1 As Object, oComboBox1 As Object

Sub Main
Dim aListStrings() As String
Dim aComboStrings() As String
  DialogLibraries.LoadLibrary("Standard")
  oDialog = createUnoDialog( DialogLibraries.Standard.Dialog1 )
  With oDialog
    oListBox1 = .getControl("ListBox1")
    oComboBox1 = .getControl("ComboBox1")
  End With
  aListStrings() = Array("List1","List2","List3")
  aComboStrings() = Array("Item1","Item2","Item3")
  
  oListBox1.addItems(aListStrings(),0)
  oComboBox1.addItems(aComboStrings(),0)
  
  oDialog.execute()
  oDialog.dispose()
End Sub


Sub Button1_initiated
  MsgBox oListBox1.getSelectedItem()
End Sub


Sub Button2_initiated
  MsgBox oComboBox1.getSelectedText()
End Sub

作成したダイアログの "ボタン 1" に Sub Button1_initiated を "ボタン 2" に Sub Button2_initiated を割り当てます。共に「ボタンが押されたとき (When initiating)」に割り当てます。

この状態で Main を実行するとダイアログが表示されます。リストボックスまたはコンボボックスのアイテムを選択した状態でボタンをクリックすると MsgBox に選択中の値が表示されます。

このコードを部分ごとに説明します。

Sub Main
Dim aListStrings() As String
Dim aComboStrings() As String
  DialogLibraries.LoadLibrary("Standard")
  oDialog = createUnoDialog( DialogLibraries.Standard.Dialog1 )

この部分はダイアログオブジェクトを作成している部分です。

  With oDialog
    oListBox1 = .getControl("ListBox1")
    oComboBox1 = .getControl("ComboBox1")
  End With

そして,ダイアログオブジェクトからコントロール名を指定してそれぞれのオブジェクトを取得しています。このとき,getControl メソッドにコントロール名を指定しています (コントロール名はコントロールのプロパティーの最上段の名前プロパティーで付けたもの)。ここで注意することは,ダイアログモデルオブジェクトからコントロールオブジェクトを取得するのではないということです。

  aListStrings() = Array("List1","List2","List3")
  aComboStrings() = Array("Item1","Item2","Item3")
  
  oListBox1.addItems(aListStrings(),0)
  oComboBox1.addItems(aComboStrings(),0)

そして,この部分ですが。この部分ではそれぞれのコントロールに項目を追加しています。項目の追加はリストボックス,コンボボックス共に addItems メソッドなどで行います。二つの引数はそれぞれ,追加する項目の文字列による配列,項目を追加し始める位置です。

  oDialog.execute()
  oDialog.dispose()
End Sub

...

Sub Button1_initiated
  MsgBox oListBox1.getSelectedItem()
End Sub

ボタン 1 に割り当てたプロシージャです。ここで,リストボックスコントロールオブジェクトの getSelectedItem メソッドを利用して選択中の項目を取得しています。


Sub Button2_initiated
  MsgBox oComboBox1.getSelectedText()
End Sub

ボタン 2 に割り当てたプロシージャです。コンボボックスコントロールオブジェクトの getSelectedText メソッドで選択中の項目を文字列として取得します。

リストボックスとコンボボックスでは選択中の項目を取得する際のメソッド名が違うので注意が必要です。

リストボックスとコンボボックスの主要なメソッドについて書いておきます。

  • リストボックス
SbxVOID addItem (
[in]string sItem‚
[in]integer nPos )
項目を一つ追加する
SbxVOID addItems (
[in]sequence<string> aItems‚
[in]integer nPos )
項目を複数追加する
SbxVOID removeItems (
[in]integer nBegin‚
[in]integer nCount )
項目を取り除く
SbxINTEGER getItemCount ( void )項目数を戻す
SbxSTRING getItem (
[in]integer nPos )
番号の項目を戻す
SbxARRAY getItems ( void )項目の配列を戻す
SbxINTEGER getSelectedItemPos ( void )選択中の項目の番号を戻す
SbxARRAY getSelectedItemsPos ( void )複数選択中の項目の番号を戻す
SbxSTRING getSelectedItem ( void )選択中の項目を文字列で戻す
SbxARRAY getSelectedItems ( void )複数選択中の項目を配列で戻す
SbxVOID selectItemPos (
[in] integer nPos‚
[in]boolean bSelect )
番号の項目を選択,選択解除する
SbxVOID selectItemsPos (
[in]sequence<string> aItems‚
[in]boolean bSelect )
番号配列の項目を複数選択,選択解除する
SbxVOID selectItem (
[in]string item‚
[in]boolean IsSelected )
文字列の項目を選択する
SbxBOOL isMutipleMode ( void )複数選択可かどうか
SbxVOID setMultipleMode (
SbxBOOL )
複数選択モードの設定をする
SbxINTEGER getDropDownLineCount ( void )ドロップダウン時の行数を戻す
SbxVOID setDropDownLineCount (
[in]short nLines )
ドロップダウン時の行数を設定する

リストボックスでは複数選択可のときには getSelectedItems メソッドで配列として選択状態の項目全てを取得できます。また,リストボックスでは選択中の項目位置の取得も可能です。

  • コンボボックス
SbxVOID addItem (
[in]string aItem‚
[in]short nPos )
一つのアイテムを特定のポジションに加える
SbxVOID addItems (
[in]sequence<string> aItems‚
[in]short nPos )
配列分のアイテムを特定の場所に加える
SbxVOID removeItems (
[in]short nPos‚
[in]short nCount )
アイテムを取り除く(特定の位置から個数分)
SbxINTEGER getItemCount ( void )アイテム数を返す
SbxSTRING getItem (
[in]short nPos )
位置で指定したアイテムを返す
SbxARRAY getItems ( void )全てのアイテムによる配列を返す
SbxINTEGER getDropDownLineCount ( void )ドロップダウンによる表示数を返す
SbxVOID setDropDownLineCount (
SbxINTEGER )
ドロップダウン時の表示数を設定する
SbxVOID addTextListener (
SbxOBJECT )
SbxVOID removeTextListener (
SbxOBJECT )
SbxVOID setText (
[in]string String )
表示テキストを設定する
SbxVOID insertText (
SbxOBJECT‚
SbxSTRING )
SbxSTRING getText ( void )表示中のテキストを取得する
SbxSTRING getSelectedText ( void )選択中のテキストを取得する
SbxVOID setSelection (
SbxOBJECT )
選択範囲を設定する
SbxOBJECT getSelection ( void )選択範囲のオブジェクト
SbxBOOL isEditable ( void )編集可能かどうか
SbxVOID setEditable (
SbxBOOL )
編集可能,不可能を設定する
SbxVOID setMaxTextLen (
[in]integer nLen )
最大文字数を設定する
SbxINTEGER getMaxTextLen ( void )最大文字数を取得する
  • はにゃ?? 2005-03-23 (水) 22:35:12
  • はにゃ?さん。素早く丁寧な御回答有難う御座いました。“ダイアログモデルオブジェクトからコントロールオブジェクトを取得するのではないということ”で解決致しました。今後ともよろしくお願いします。 -- のの? 2005-03-30 (水) 11:52:11


Attach file: filedialog_listbox.sxc 1135 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