2017-04-24 46 views
1

我正在創建一個自定義對話框,其中用戶應該選擇多個可能的條目之一。我使用列表框列出了可能的條目。自由職業辦公室自定義對話框表

每行有多個變量,因此我想使用表格來正確對齊條目。有沒有可能這樣做?

我有什麼:

abcdefg hijkl mnopq 
abcd efghijk lmno 

我想要什麼:

abcdefg hijkl  mnopq 
abcd  efghilkl mno 

回答

0

使用列表框固定寬度字體,墊帶空格的字符串。

Sub PaddedListboxItems 
    oListBox.addItems(Array(
     PaddedItem(Array("abcdefg", "hijkl", "mnopq")), 
     PaddedItem(Array("abcd", "efghijk", "lmno"))), 0) 
End Sub 

Function PaddedItem(item_strings As Array) 
    PaddedItem = PadString(item_strings(0), 10) & _ 
     PadString(item_strings(1), 11) & item_strings(2) 
End Function 

Function PadString(strSource As String, lPadLen As Long) 
    PadString = strSource & " " 
    If Len(strSource) < lPadLen Then 
     PadString = strSource & Space(lPadLen - Len(strSource)) 
    End If 
End Function 

更多的方式來墊字符串基本處於http://www.tek-tips.com/viewthread.cfm?qid=522164,雖然不是所有的人都在LibreOffice的基礎性工作。

0

是的,這是可能的。

創建一個新對話框,在底部添加一個標籤。 創建一個新模塊,並添加以下代碼:

Option Explicit 
Option Base 0 

Dim oDialog1 As Object, oDataModel As Object, oListener As Object 

Sub OpenDialog() 
    Dim oGrid As Object, oGridModel As Object, oColumnModel As Object, oCol As Object 
    Dim oLabel1 As Object, rect(3) As Integer 

    DialogLibraries.LoadLibrary("Standard") 
    oDialog1 = CreateUnoDialog(DialogLibraries.Standard.Dialog1) 
    oGridModel = oDialog1.getModel().createInstance("com.sun.star.awt.grid.UnoControlGridModel") 

    oLabel1 = oDialog1.getModel().getByName("Label1") 
    rect(0) = oLabel1.getPropertyValue("PositionX") 
    rect(1) = 10 
    rect(2) = oLabel1.getPropertyValue("Width") 
    rect(3) = oLabel1.getPropertyValue("PositionY") - 2*rect(1) 
    With oGridModel 
     .PositionX = rect(0) 
     .PositionY = rect(1) 
     .Width = rect(2) 
     .Height = rect(3) 
    End With 

    oColumnModel = oGridModel.ColumnModel 
    oCol = oColumnModel.createColumn() 
    oCol.Title = "Column 1" 
    oColumnModel.addColumn(oCol) 

    oCol = oColumnModel.createColumn() 
    oCol.Title = "Column 2" 
    oColumnModel.addColumn(oCol) 

    oCol = oColumnModel.createColumn() 
    oCol.Title = "Column 3" 
    oColumnModel.addColumn(oCol) 

    oDialog1.getModel().insertByName("grid", oGridModel) 
    oGrid = oDialog1.getControl("grid") 
    oListener = (CreateUnoListener("grid_", "com.sun.star.awt.grid.XGridSelectionListener")) 
    oGrid.addSelectionListener(oListener) 

    oDataModel = oGridModel.GridDataModel 
    oDataModel.addRow("a", Array("abcdefg", "hijkl", "mnopq")) 
    oDataModel.addRow("b", Array("abcd", "efghijk", "lmno")) 

    oDialog1.execute() 
    oDialog1.dispose() 
End Sub 

獲取所選行的值,添加一個偵聽器grid_selectionChanged事件:

Sub grid_selectionChanged(ev) 
    Dim oRows() As Object, oLabel1 As Object, sCells(2) As String 
    oRows = ev.Source.getSelectedRows() 
    oLabel1 = oDialog1.getModel().getByName("Label1") 
    sCells(0) = oDataModel.getRowData(oRows(0))(0) 
    sCells(1) = oDataModel.getRowData(oRows(0))(1) 
    sCells(2) = oDataModel.getRowData(oRows(0))(2) 
    oLabel1.setPropertyValue("Label", "Selected values: " + sCells(0) + "," + sCells(1) + "," + sCells(2)) 
End Sub 

如果你做了所有正確,運行OpenDialog你應該得到你的網格:

enter image description here