Top > OOoBasic > Form > Control

コントロール Edit

フォームの上のコントロールはダイアログ上のものとよく似ていますが、フォームでのコントロール制御はコントロールのコントローラオブジェクトにアクセスしにくいため、コントロールのモデルオブジェクトで行うことになります。

コントロールモデル取得 Edit

フォームオブジェクトから様々なメソッドでフォームに所属するコントロールを取得できます。以下のようなインターフェースを利用できますが、主にコントロール名を指定して取得することが多いため、XNameContainer インターフェースをよく使用します。

フォームから取得 Edit

フォームからコントロールを取得します。

Sub form_control_1
  oDoc = ThisComponent
  oDrawPage = oDoc.getDrawPage()
  oForm = oDrawPage.getForms().getByName("Standard")
  
  oControl = oForm.getByName("PushButton")
End Sub

この様にして取得できるのはコントロールのモデルオブジェクトです。モデルオブジェクトからコントローラオブジェクトにアクセスすることはできません。

イベントで取得 Edit

フォームを取得するまでが異なりますが、後は上記と同じになります。

Sub form_4( oEv As com.sun.star.awt.ActionEvent )
  oForm = oEv.Source.Model.Parent
  
  oForm.getByName("PushButton1")
End Sub

サブフォームのコントロール Edit

フォームにコントロールとしてサブフォームを配置することができます。親フォームからサブフォームにあるコントロールにアクセスすることもできます。

 oSubForm = oForm.getByName("SubForm")
 oSubButton = oObj1.getByName("SubPushButton")

コントロールコントローラ取得 Edit

フォームコントロールのモデルを取得すると、ドキュメントビューから該当するコントロールのコントローラを取得できます。

oDoc = ThisComponent
oController = oDoc.getCurrentController()

oButton_Model = oForm.getByName("PushButton1")
oButton = oController.getControl( oButton_Model )

コントロールの追加 Edit

動的なコントロールの追加は図形描写と同じように行います。図形描写参照。

イベント Edit

コントロールを押したり、テキストを編集したり、マウスで操作したりといったイベントを割り当てます。

イベントの設定 Edit

コントロールにイベントを割り当てて各動作時にコードが実行されるように設定します。イベントの割り当ては各コントロールに対して行うのではなく、フォームオブジェクトに対して行います。

イベントは ScriptEventDescriptor struct で各項目を設定します。

 aEvent = CreateUnoStruct( _
     "com.sun.star.script.ScriptEventDescriptor")
 With aEvent
   .AddListenerParam = ""
   .EventMethod = "actionPerformed"
   .ListenerType = "XActionListener"
   .ScriptCode = "vnd.sun.star.script:Standard.Module1.btn_push?language=Basic&location=document"
   .ScriptType = "Script"
 End With
ScriptEventDescriptor説明
EventMethodイベントに対応するインターフェースのメソッド
ListenerTypeイベントに対応するインターフェース
ScriptCode実行するコードの URI
ScriptType実行するコードの種類
AddListenerParam引数

イベントの種類とインターフェース、メソッド名はイベントなどを参照してください。

実際にイベントを割り当てるには次のようにします。

oForm.registerScriptEvent(1,aEvent)

ここで、最初の引数はイベントを割り当てたいイベントエントリのインデックスです。

イベントの削除 Edit

revokeScriptEvent メソッドで一つのイベントを削除できます。引数は順にインデックス、インターフェース名、メソッド名、オプションを指定します。

oForm.revokeScriptEvent( _
   0, "XActionListener", "actionPerformed", "" )

revokeScriptEvents メソッドにイベントエントリのインデックスを指定してそのコントロールに設定されているすべてのイベントを削除します。

oForm.revokeScriptEvents(1)

イベントの取得 Edit

設定されているすべてのイベントを取得するには getScriptEvents メソッドを利用します。返り値は []ScriptEventDescriptor です。

aEvents = oForm.getScriptEvents()

メモ Edit

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
Sub ButtonPush_1( ev )
  oControlModel = ev.Source.Model
  
  'oDoc = oControlModel.getParent().getParent().getParent()
  oDoc = ThisComponent
  oDrawPage = oDoc.getDrawPage()
  
  ' search in shapes
  For i = 0 To oDrawPage.getCount() -1 step 1
    oShape = oDrawPage.getByIndex(i)
    If HasUnoInterfaces( oShape, "com.sun.star.drawing.XControlShape" ) Then
      If EqualUnoObjects( oShape.getControl(), oControlModel ) Then
        oRange = oShape.getAnchor()
        If NOT IsNull( oRange ) Then
          oFrame = oRange.TextFrame
          msgbox oFrame.Name
        End If
      End If
    End If
  Next
End Sub

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