OOobbs2/116
質問
コントロール追加の件ではありがとうございました。 家計簿の費目列など、固定値を使用する項目ににセルカーソルが移動した時にそのセルの位置にリストボックスを移動させて、選択した値を同じ位置のセルに入力しようと思っています。 フォーカスをフォームからセルに移動させる手段はこのサイトにあったのですが、フォームにフォーカスする方法が分かりません。 ネットで調べてみて どなたか良かったらアドバイスお願いします。 回答
Sub focus_form_control_1 oDoc = ThisComponent oDrawPage = oDoc.getDrawPages().getByIndex(0) oForm = oDrawPage.getForms().getByIndex(0) oController = oDoc.getCurrentController() oListBox = oForm.getByName("ListBox") oListControl = oController.getControl(oListBox) oListControl.setFocus() 'mri oListControl End Sub Basic を使っているのであれば queryInterface はまったく必要ありません。
oController = ThisComponent.currentController oDrawPage = oController.ActiveSheet.DrawPage oDrawPage.add(g_oListBox) 中略 with oListBox .Dropdown = True .StringItemList = Array("ABC", "123") end with aEvent = CreateUnoStruct("com.sun.star.script.ScriptEventDescriptor") With aEvent .AddListenerParam = "com.sun.star.awt.KeyEvent" .EventMethod = "keyPressed" .ListenerType = "XKeyListener" .ScriptCode = "documen:Standard.HouseKeeping_Book.zListBox_keyPressed" .ScriptType = "StarBasic" End With oForm = oDrawPage.Forms.getByIndex(0) oForm.registerScriptEvent(1, aEvent) oListControl = oController.getControl(oListBox) oListControl.setFocus() '-------------------------------------------------------------------------------------------------- Sub zListBox_keyPressed(oKeyEvent) zListBox_keyPressed = false If oKeyEvent.keyCode = com.sun.star.awt.Key.RETURN Then zListBox_keyPressed = true ThisComponent.currentController.Frame.ComponentWindow.setFocus() End If End Sub よろしければアドバイスお願いします。
ScriptCode の指定は vnd.sun.star.script: プロトコルを使用して指定します。OOoBasic/Generic/ScriptingURL また、その場合 ScriptType が StarBasic では動かないので "Script" と指定します。
最初のコントロールであれば registerScriptEvent メソッドのインデックス指定は 0 になるはずです。No Script エラーが示すように URL 指定が間違っているのではないかと…。 zListBox_keyPressed = false としているようですが、キーイベントはハンドラと異なり返り値は void です。値を返す必要はありませんし、イベントを消費することもできません。(Sub だと値は返せませんが)
感想,コメント,メモ
|