ເນື້ອໃນ

# ບໍລິການ SFDialogs.DialogControl

ບໍລິການ DialogControl ຈັດການຕົວຄວບຄຸມຕ່າງໆທີ່ເປັນຂອງໄດອາລັອກທີ່ກຳນົດດ້ວຍ Dialog Editor ຂອງ Basic. ແຕ່ລະອິນສະແຕນຊ໌ຂອງບໍລິການປັດຈຸບັນແທນຕົວຄວບຄຸມດ່ຽວພາຍໃນກ່ອງໄດອາລັອກ.

ຈຸດປະສົງຫຼັກແມ່ນຢູ່ທີ່ການດຶງຄ່າ ແລະ ຕັ້ງຄ່າທີ່ສະແດງໂດຍຕົວຄວບຄຸມຂອງກ່ອງໄດອາລັອກ. ການຈັດຮູບແບບສາມາດເຂົ້າເຖິງໄດ້ຜ່ານຄຸນສົມບັດ XControlModel ແລະ XControlView.

ໝາຍເຫດວ່າ ເນື້ອໃນຂອງຄຸນສົມບັດ DialogControl.Value ຈະແຕກຕ່າງກັນໄປຕາມປະເພດຕົວຄວບຄຸມ.

ມີການໃຫ້ຄວາມສຳຄັນເປັນພິເສດຕໍ່ຕົວຄວບຄຸມປະເພດຕົ້ນໄມ້ (tree control). ມັນງ່າຍທີ່ຈະຕື່ມຂໍ້ມູນໃສ່ຕົ້ນໄມ້, ບໍ່ວ່າຈະເປັນເທື່ອລະກິ່ງ ຫຼື ຫຼາຍກິ່ງພ້ອມກັນ. ການຕື່ມຂໍ້ມູນໃສ່ຕົວຄວບຄຸມຕົ້ນໄມ້ສາມາດເຮັດໄດ້ທັງແບບຄົງທີ່ (statically) ຫຼື ແບບໄດນາມິກ (dynamically).

ບໍລິການ SFDialogs.DialogControl ມີຄວາມກ່ຽວຂ້ອງກັນຢ່າງໃກ້ຊິດກັບບໍລິການ SFDialogs.Dialog.

## ການເອີ້ນໃຊ້ບໍລິການ

ກ່ອນທີ່ຈະໃຊ້ບໍລິການ DialogControl, ຫ້ອງສະໝຸດ ScriptForge ຈຳເປັນຕ້ອງໄດ້ຮັບການໂຫຼດ ຫຼື ນຳເຂົ້າ:

• ມາໂຄຣ Basic ຕ້ອງມີການໂຫຼດຄັງສຳນວນ ScriptForge ໂດຍໃຊ້ຄຳສັ່ງດັ່ງນີ້:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• ສະຄຣິບ Python ຕ້ອງມີການນຳເຂົ້າຈາກໂມດູນ scriptforge:
from scriptforge import CreateScriptService

ບໍລິການ DialogControl ຖືກເອີ້ນໃຊ້ຈາກອິນສະແຕນຊ໌ຂອງບໍລິການ Dialog ທີ່ມີຢູ່ຜ່ານວິທີການ Controls() ຂອງມັນ. ໄດອາລັອກຕ້ອງຖືກເລີ່ມຕົ້ນດ້ວຍບໍລິການ SFDialogs.Dialog.

          Dim myDialog As Object, myControl As Object
          Set myDialog = CreateScriptService("SFDialogs.Dialog", "GlobalScope", myLibrary, DialogName)
          Set myControl = myDialog.Controls("myTextBox")
          myControl.Value = "ໄດອາລັອກເລີ່ມຕົ້ນເມື່ອ " & Now()
          myDialog.Execute()
          ' ... ປະມວນຜົນຄ່າຕົວຈິງຂອງຕົວຄວບຄຸມ
          myDialog.Terminate()

         from time import localtime, strftime
         dlg = CreateScriptService('SFDialogs.Dialog', 'GlobalScope', lib_name, dlg_name)
         text = dlg.Controls('myTextBox')
         text.Value = "ໄດອາລັອກເລີ່ມຕົ້ນເມື່ອ " + strftime("%a, %d %b %Y %H:%M:%S", localtime())
         dlg.Execute()
         # ... ປະມວນຜົນຄ່າຕົວຈິງຂອງຕົວຄວບຄຸມ
         dlg.Terminate()

## ການດຶງອິນສະແຕນຊ໌ DialogControl ທີ່ກະຕຸ້ນເຫດການຂອງຕົວຄວບຄຸມ

ອິນສະແຕນຊ໌ຂອງບໍລິການ DialogControl ສາມາດດຶງມາໄດ້ຜ່ານບໍລິການ SFDialogs.DialogEvent, ໂດຍທີ່ໄດອາລັອກນັ້ນຕ້ອງຖືກເລີ່ມຕົ້ນດ້ວຍບໍລິການ Dialog. ໃນຕົວຢ່າງລຸ່ມນີ້, oControl ຈະບັນຈຸອິນສະແຕນຊ໌ DialogControl ທີ່ກະຕຸ້ນເຫດການຂອງຕົວຄວບຄຸມ.

          Sub aControlEventHandler(ByRef poEvent As Object)
              Dim oControl As Object
              Set oControl = CreateScriptService("SFDialogs.DialogEvent", poEvent)
              ' ...
          End Sub

ຫຼື ໃຊ້ Python:

         def control_event_handler(event: uno):
             oControl = CreateScriptService('SFDialogs.DialogEvent', event)
             # ...

ໝາຍເຫດວ່າໃນຕົວຢ່າງກ່ອນໜ້ານີ້, ຄຳນຳໜ້າ "SFDialogs." ອາດຈະຖືກລະເວັ້ນໄດ້ຕາມຄວາມເໝາະສົມ.

## ການຈັດການຂໍ້ຜິດພາດ (exceptions) ໃນຕົວຈັດການເຫດການ

ເມື່ອສ້າງຕົວຈັດການເຫດການສຳລັບເຫດການຂອງຕົວຄວບຄຸມ, ມັນເປັນວິທີທີ່ດີທີ່ຈະຈັດການກັບຂໍ້ຜິດພາດພາຍໃນ subroutine ນັ້ນເອງ. ຕົວຢ່າງ, ສົມມຸດວ່າຕົວຈັດການເຫດການລຸ່ມນີ້ຖືກເອີ້ນເມື່ອປຸ່ມຖືກຄລິກ.

        Sub OnButtonClicked(ByRef oEvent As Object)
        On Local Error GoTo Catch
            Dim oControl As Object
            oControl = CreateScriptService("DialogEvent", oEvent)
            ' ປະມວນຜົນເຫດການ
            Exit Sub
        Catch:
            MsgBox SF_Exception.Description
            SF_Exception.Clear
        End Sub

ເອີ້ນໃຊ້ SF_Exception.Clear ຖ້າທ່ານບໍ່ຕ້ອງການໃຫ້ຂໍ້ຜິດພາດສົ່ງຕໍ່ໄປຫຼັງຈາກການເຮັດວຽກຂອງໄດອາລັອກສິ້ນສຸດລົງ.

ໃນ Python ໃຫ້ໃຊ້ບລັອກ try/except ເພື່ອຈັດການຂໍ້ຜິດພາດດັ່ງທີ່ສະແດງລຸ່ມນີ້:

        def on_button_clicked(event=None):
            try:
                oControl = CreateScriptService("DialogEvent", event)
                # ປະມວນຜົນເຫດການ
            except Exception as e:
                # ວັດຖຸ "bas" ລຸ່ມນີ້ແມ່ນອິນສະແຕນຊ໌ຂອງບໍລິການ Basic
                bas.MsgBox(str(e))

## ປະເພດຕົວຄວບຄຸມ

ບໍລິການ DialogControl ສາມາດໃຊ້ໄດ້ກັບຕົວຄວບຄຸມປະເພດເຫຼົ່ານີ້:

• Button • CheckBox • ComboBox • CurrencyField • DateField • FileControl | • FixedLine • FixedText • FormattedField • GroupBox • Hyperlink • ImageControl | • ListBox • NumericField • PatternField • ProgressBar • RadioButton • ScrollBar | • TableControl • TabPageContainer • TextField • TimeField • TreeControl

ປະເພດຕົວຄວບຄຸມ TabPageContainer ບໍ່ໄດ້ຖືກກຳນົດໄວ້ໃນ Dialog Editor.

## ຄຸນສົມບັດ

ຊື່ | ອ່ານຢ່າງດຽວ | ປະເພດ | ໃຊ້ໄດ້ກັບ | ຄຳອະທິບາຍ
--- | --- | --- | --- | ---
Border | ແມ່ນ | String | Button, … | ຄຸນສົມບັດ Border ໝາຍເຖິງຂອບອ້ອມຮອບຕົວຄວບຄຸມ: "3D", "FLAT" ຫຼື "NONE".
Cancel | ບໍ່ | Boolean | Button | ກຳນົດວ່າປຸ່ມຄຳສັ່ງມີພຶດຕິກຳເປັນປຸ່ມ ຍົກເລີກ ຫຼື ບໍ່.
Caption | ບໍ່ | String | Button, CheckBox, FixedLine, FixedText, GroupBox, Hyperlink, RadioButton | ກຳນົດຂໍ້ຄວາມທີ່ກ່ຽວຂ້ອງກັບຕົວຄວບຄຸມ.
ControlType | ແມ່ນ | String | ທັງໝົດ | ໜຶ່ງໃນປະເພດທີ່ລະບຸໄວ້ຂ້າງເທິງ.
CurrentNode | ບໍ່ | ວັດຖຸ UNO | TreeControl | ໂນດ (node) ເທິງສຸດທີ່ຖືກເລືອກຢູ່ໃນຕົວຄວບຄຸມຕົ້ນໄມ້. ເບິ່ງ XmutableTreeNode ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.
Default | ບໍ່ | Boolean | Button | ກຳນົດວ່າປຸ່ມຄຳສັ່ງເປັນປຸ່ມເລີ່ມຕົ້ນ (ຕົກລົງ) ຫຼື ບໍ່.
Enabled | ບໍ່ | Boolean | ທັງໝົດ | ກຳນົດວ່າຕົວຄວບຄຸມສາມາດເຂົ້າເຖິງໄດ້ດ້ວຍເຄີເຊີ (cursor) ຫຼື ບໍ່.
Format | ບໍ່ | String | DateField, TimeField, FormattedField (ອ່ານຢ່າງດຽວ) | ກຳນົດຮູບແບບທີ່ໃຊ້ໃນການສະແດງວັນທີ ແລະ ເວລາ. ຕ້ອງເປັນໜຶ່ງໃນຂໍ້ຄວາມເຫຼົ່ານີ້: ສຳລັບວັນທີ: "Standard (short)", "Standard (short YY)", "Standard (short YYYY)", "Standard (long)", "DD/MM/YY", "MM/DD/YY", "YY/MM/DD", "DD/MM/YYYY", "MM/DD/YYYY" , "YYYY/MM/DD", "YY-MM-DD", "YYYY-MM-DD". ສຳລັບເວລາ: "24h short", "24h long", "12h short", "12h long".
ListCount | ແມ່ນ | Long | ComboBox, ListBox, TableControl | ກຳນົດຈຳນວນແຖວໃນ ListBox, ComboBox ຫຼື TableControl.
ListIndex | ບໍ່ | Long | ComboBox, ListBox, TableControl | ກຳນົດວ່າລາຍການໃດຖືກເລືອກໃນ ListBox, ComboBox ຫຼື TableControl.
Locked | ບໍ່ | Boolean | ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, NumericField, PatternField, TextField, TimeField | ກຳນົດວ່າຕົວຄວບຄຸມເປັນແບບອ່ານຢ່າງດຽວ ຫຼື ບໍ່.
MultiSelect | ບໍ່ | Boolean | ListBox | ກຳນົດວ່າຜູ້ໃຊ້ສາມາດເລືອກໄດ້ຫຼາຍລາຍການໃນ listbox ຫຼື ບໍ່.
Name | ແມ່ນ | String | ທັງໝົດ | ຊື່ຂອງຕົວຄວບຄຸມ.
Page | ບໍ່ | Integer | ທັງໝົດ | ໄດອາລັອກອາດຈະມີຫຼາຍໜ້າທີ່ຜູ້ໃຊ້ສາມາດເລື່ອນໄປເທື່ອລະຂັ້ນໄດ້. ຄຸນສົມບັດ Page ຂອງວັດຖຸ Dialog ກຳນົດວ່າໜ້າໃດຂອງໄດອາລັອກທີ່ກຳລັງເຮັດວຽກຢູ່. ຄຸນສົມບັດ Page ຂອງຕົວຄວບຄຸມກຳນົດໜ້າຂອງໄດອາລັອກທີ່ຕົວຄວບຄຸມນັ້ນສະແດງໃຫ້ເຫັນ.
Parent | ແມ່ນ | ປ່ອງຢ້ຽມໂຕ້ຕອບ ບໍລິການ | ທັງໝົດ | ອິນສະແຕນຊ໌ຂອງວັດຖຸຄລາດ SFDialogs.Dialog ທີ່ເປັນຕົວຫຼັກ.
Picture | ບໍ່ | String | Button, ImageControl | ກຳນົດຊື່ໄຟລ໌ທີ່ມີບິດແມັບ (bitmap) ຫຼື ຮູບພາບປະເພດອື່ນທີ່ຈະສະແດງໃນຕົວຄວບຄຸມທີ່ລະບຸ. ຊື່ໄຟລ໌ຕ້ອງເປັນໄປຕາມຄຸນລັກສະນະ FileNaming ຂອງບໍລິການ ScriptForge.FileSystem.
RootNode | ແມ່ນ | ວັດຖຸ UNO | TreeControl | ວັດຖຸທີ່ແທັນໂນດຮາກ (root node) ລະດັບຕໍ່າສຸດ (ປົກກະຕິແລ້ວຈະມີພຽງໂນດຮາກດຽວ). ເບິ່ງ XmutableTreeNode ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.
RowSource | ບໍ່ | Array of strings | ComboBox, ListBox | ກຳນົດຂໍ້ມູນທີ່ມີຢູ່ໃນກ່ອງຄອມໂບ ຫຼື ກ່ອງລາຍການ.
TabIndex | ແມ່ນ | Numeric | All | ຄຸນສົມບັດ TabIndex ກຳນົດຕຳແໜ່ງຂອງຕົວຄວບຄຸມໃນລຳດັບການແທັບ (tab order) ພາຍໃນໄດອາລັອກ.
Text | ແມ່ນ | String | ComboBox, FileControl, FormattedField, PatternField, TextField | ໃຫ້ການເຂົ້າເຖິງຂໍ້ຄວາມທີ່ກຳລັງສະແດງໂດຍຕົວຄວບຄຸມ.
TipText | ບໍ່ | String | ທັງໝົດ | ກຳນົດຂໍ້ຄວາມທີ່ຈະປະກົດຂຶ້ນເປັນ tooltip ເມື່ອທ່ານວາງຕົວຊີ້ເມົາສ໌ໄວ້ເທິງຕົວຄວບຄຸມ.
TripleState | ບໍ່ | Boolean | CheckBox | ກຳນົດວ່າຕົວຄວບຄຸມ checkbox ຈະປະກົດເປັນສີເທົາ (dimmed) ຫຼື ບໍ່.
URL | ບໍ່ | String | Hyperlink | URL ທີ່ຈະເປີດເມື່ອຕົວຄວບຄຸມຖືກຄລິກ.
Value | ບໍ່ | Variant |  | ເບິ່ງທີ່ ຄຸນສົມບັດ Value
Visible | ບໍ່ | Boolean | ທັງໝົດ | ກຳນົດວ່າຕົວຄວບຄຸມຈະຖືກເຊື່ອງ ຫຼື ສະແດງໃຫ້ເຫັນ.
XControlModel | ແມ່ນ | ວັດຖຸ UNO | ທັງໝົດ | ວັດຖຸ UNO ທີ່ແທນຕົວແບບຄວບຄຸມ (control model). ເບິ່ງ XControlModel ແລະ UnoControlDialogModel ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.
XControlView | ແມ່ນ | ວັດຖຸ UNO | ທັງໝົດ | ວັດຖຸ UNO ທີ່ແທນມຸມມອງຄວບຄຸມ (control view). ເບິ່ງ XControl ແລະ UnoControlDialog ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.
XTreeDataModel | ແມ່ນ | ວັດຖຸ UNO | TreeControl | ວັດຖຸ UNO ທີ່ແທນຕົວແບບຂໍ້ມູນຂອງຕົວຄວບຄຸມຕົ້ນໄມ້. ເບິ່ງ XMutableTreeDataModel ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.
XGridColumnModel | ແມ່ນ | ວັດຖຸ UNO | TableControl | ວັດຖຸ UNO ທີ່ແທນຕົວແບບຂໍ້ມູນຂອງຕົວຄວບຄຸມຕາຕະລາງ. ເບິ່ງ XGridColumnModel ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.
XGridDataModel | ແມ່ນ | ວັດຖຸ UNO | TableControl | The UNO object representing the tree control data model. Refer to XGridDataModel in Application Programming Interface (API) documentation for detailed information.

## ຄຸນສົມບັດ Value

ປະເພດຕົວຄວບຄຸມ | ປະເພດ | ຄຳອະທິບາຍ
--- | --- | ---
Button | Boolean | ສຳລັບປຸ່ມສະຫຼັບ (toggle buttons) ເທົ່ານັ້ນ
CheckBox | ບູລີນ (Boolean) ຫຼື ເລກຖ້ວນ (Integer) | 0, False: ບໍ່ໄດ້ໝາຍເລືອກ 1, True: ໝາຍເລືອກແລ້ວ 2: ເປັນສີເທົາ, ບໍ່ຮູ້
ComboBox | String | ຄ່າທີ່ຖືກເລືອກ. ຄຸນສົມບັດ ListIndex ເປັນອີກທາງເລືອກໜຶ່ງ.
CurrencyField | ຕົວເລກ |
DateField | Date |
FileControl | String | ຊື່ໄຟລ໌ທີ່ຈັດຮູບແບບຕາມຄຸນສົມບັດ FileNaming ຂອງບໍລິການ ScriptForge.FileSystem
FormattedField | ຂໍ້ຄວາມ ຫຼື ຕົວເລກ |
ListBox | ຂໍ້ຄວາມ ຫຼື ອາເຣຂອງຂໍ້ຄວາມ | ແຖວທີ່ຖືກເລືອກ ເປັນແບບຄ່າດ່ຽວ (scalar) ຫຼື ອາເຣ ຂຶ້ນຢູ່ກັບຄຸນລັກສະນະ MultiSelect
NumericField | ຕົວເລກ |
PatternField | String |
ProgressBar | ຕົວເລກ | ຕ້ອງຢູ່ພາຍໃນຂອບເຂດທີ່ກຳນົດໄວ້ລ່ວງໜ້າ
RadioButton | Boolean | ແຕ່ລະປຸ່ມມີຊື່ຂອງມັນເອງ. ພວກມັນຈະຖືກເຊື່ອມໂຍງເຂົ້າກັນຖ້າຕຳແໜ່ງ TAB ຂອງພວກມັນຢູ່ຕິດກັນ. ຖ້າ radiobutton ປຸ່ມໜຶ່ງຖືກຕັ້ງເປັນ True, ປຸ່ມອື່ນໆທີ່ກ່ຽວຂ້ອງຈະຖືກຕັ້ງເປັນ False ໂດຍອັດຕະໂນມັດ
ScrollBar | ຕົວເລກ | ຕ້ອງຢູ່ພາຍໃນຂອບເຂດທີ່ກຳນົດໄວ້ລ່ວງໜ້າ
TabPageContainer | Numeric | ໄດອາລັອກອາດຈະມີຫຼາຍແທັບທີ່ລະບຸໝາຍເລກໄວ້ ເຊິ່ງສາມາດລະບຸ ຫຼື ແກ້ໄຂໄດ້ໂດຍຄຸນສົມບັດ Value ຂອງພວກມັນ.
TableControl | Array | ອາເຣໜຶ່ງມິຕິທີ່ມີຂໍ້ມູນຂອງແຖວທີ່ຖືກເລືອກໃນປັດຈຸບັນ.
TextField | String | ຂໍ້ຄວາມທີ່ປະກົດຢູ່ໃນຟິວ (field)
TimeField | Date |

ບໍ່ມີຄຸນສົມບັດ Value ສຳລັບຕົວຄວບຄຸມໄດອາລັອກປະເພດ GroupBox, Hyperlink, ImageControl ແລະ TreeControl.

## ຄຸນສົມບັດເຫດການ

ຄຸນສົມບັດເຫດການ On… ແມ່ນຂໍ້ຄວາມ URI ທີ່ອ້າງອີງເຖິງສະຄຣິບ (script) ທີ່ຖືກກະຕຸ້ນເມື່ອມີເຫດການເກີດຂຶ້ນ. ອ່ານລາຍລະອຽດເພີ່ມເຕີມໄດ້ທີ່ scripting framework URI specification.

ຊື່ (ລິ້ງ API ຂອງເຫດການ) | ຄຳອະທິບາຍຕາມທີ່ຕິດສະຫຼາກໄວ້ໃນ Basic IDE
--- | ---
OnActionPerformed | ດຳເນີນການ
OnAdjustmentValueChanged | ໃນຂະນະທີ່ປັບ
OnFocusGained | ເມື່ອໄດ້ຮັບໂຟກັສ
OnFocusLost | ເມື່ອເສຍໂຟກັສ
OnItemStateChanged | ສະຖານະຂອງລາຍການປ່ຽນແປງ
OnKeyPressed | ກົດປຸ່ມຄີບອດ
OnKeyReleased | ປ່ອຍປຸ່ມຄີບອດ
OnMouseDragged | ເມົາສ໌ເຄື່ອນທີ່ໃນຂະນະທີ່ກົດປຸ່ມ
OnMouseEntered | ເມົາສ໌ຢູ່ຂ້າງໃນ
OnMouseExited | ເມົາສ໌ຢູ່ຂ້າງນອກ
OnMouseMoved
OnMousePressed | ກົດປຸ່ມເມົາສ໌
OnMouseReleased | ປ່ອຍປຸ່ມເມົາສ໌
OnNodeExpanded | (ບໍ່ມີໃນ Basic IDE) ເມື່ອປຸ່ມຂະຫຍາຍຖືກກົດຢູ່ໃນໂນດຂອງຕົວຄວບຄຸມຕົ້ນໄມ້
OnNodeSelected | (ບໍ່ມີໃນ Basic IDE) ເມື່ອໂນດໃນຕົວຄວບຄຸມຕົ້ນໄມ້ຖືກເລືອກ
OnTabSelected | (ບໍ່ມີໃນ Basic IDE) ເມື່ອແທັບໃນຕົວຄວບຄຸມ TabPage ຖືກເລືອກ
OnTextChanged | ຂໍ້ຄວາມຖືກແກ້ໄຂ

ຄຳແນະນຳ: ຄຸນສົມບັດ On… ທັງໝົດສາມາດກຳນົດຜ່ານການຂຽນໂປຣແກຣມໄດ້.
ຕົວຢ່າງ How to display data in a tree control ໃນ LibreOffice Wiki ໄດ້ສາທິດເລື່ອງນີ້ໄວ້.

ການກຳນົດເຫດການຜ່ານ Basic IDE ແລະ ການກຳນົດເຫດການຜ່ານມາກໂຣ ບໍ່ສາມາດເຮັດຮ່ວມກັນໄດ້.

## ວິທີການ (Methods)

ລາຍການວິທີການໃນບໍລິການ DialogControl
AddSubNode AddSubTree CreateRoot | FindNode Resize SetFocus | SetTableData WriteLine

## AddSubNode

ສ້າງ ແລະ ສົ່ງຄືນໂນດໃໝ່ຂອງຕົວຄວບຄຸມຕົ້ນໄມ້ ເປັນວັດຖຸ UNO ທີ່ຢູ່ພາຍໃຕ້ໂນດຫຼັກ. ເບິ່ງ XMutableTreeNode ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.

ວິທີການນີ້ອາດຈະຖືກເອີ້ນກ່ອນທີ່ຈະສະແດງກ່ອງໄດອາລັອກເພື່ອສ້າງຕົ້ນໄມ້ເລີ່ມຕົ້ນ. ມັນຍັງສາມາດຖືກເອີ້ນຈາກເຫດການຂອງໄດອາລັອກ ຫຼື ຕົວຄວບຄຸມ - ໂດຍໃຊ້ເຫດການ OnNodeExpanded - ເພື່ອເຮັດໃຫ້ຕົ້ນໄມ້ສົມບູນແບບໄດນາມິກ.

### ໄວຍາກອນ:

svc.AddSubNode(parentnode: uno, displayvalue: str, opt datavalue: any): uno

### ພາຣາມິເຕີ:

parentnode: ວັດຖຸ UNO ຂອງໂນດ, ປະເພດ com.sun.star.awt.tree.XMutableTreeNode.

displayvalue: ຂໍ້ຄວາມທີ່ປະກົດຢູ່ໃນກ່ອງຕົວຄວບຄຸມຕົ້ນໄມ້.

datavalue: ຄ່າໃດໜຶ່ງທີ່ກ່ຽວຂ້ອງກັບໂນດໃໝ່. datavalue ອາດຈະເປັນຂໍ້ຄວາມ, ຕົວເລກ ຫຼື ວັນທີ. ໃຫ້ລະເວັ້ນອາຄິວເມັນນີ້ຫາກບໍ່ຈຳເປັນ.

### ຕົວຢ່າງ:

ຕົວຢ່າງ LibreOffice Basic ແລະ Python ຈະດຶງໄດອາລັອກ myDialog ຂອງເອກະສານປັດຈຸບັນຈາກຫ້ອງສະໝຸດ Standard.

##### ໃນ Basic

          Dim oDlg As Object, myTree As Object, myNode As Object, theRoot As Object
          Set oDlg = CreateScriptService("Dialog",,, "myDialog")
          Set myTree = oDlg.Controls("myTreeControl")
          Set theRoot = myTree.CreateRoot("Tree top")
          Set myNode = myTree.AddSubNode(theRoot, "A branch ...")

##### ໃນ Python

         dlg = CreateScriptService('SFDialogs.Dialog', None, None, 'myDialog')
         tree = dlg.Controls('myTreeControl')
         root = tree.CreateRoot('Tree top')
         node = tree.AddSubNode(root, 'A branch ...')

## AddSubTree

ສົ່ງຄືນ True ເມື່ອຕົ້ນໄມ້ຍ່ອຍ (subtree) ທີ່ຢູ່ພາຍໃຕ້ໂນດຫຼັກ ຖືກແຊກເຂົ້າໃນຕົວຄວບຄຸມຕົ້ນໄມ້ສຳເລັດ. ຖ້າໂນດຫຼັກມີໂນດລູກຢູ່ແລ້ວກ່ອນທີ່ຈະເອີ້ນວິທີການນີ້, ໂນດລູກເຫຼົ່ານັ້ນຈະຖືກລຶບອອກ.

ວິທີການນີ້ອາດຈະຖືກເອີ້ນກ່ອນທີ່ຈະສະແດງກ່ອງໄດອາລັອກເພື່ອສ້າງຕົ້ນໄມ້ເລີ່ມຕົ້ນ. ມັນຍັງສາມາດຖືກເອີ້ນຈາກເຫດການຂອງໄດອາລັອກ ຫຼື ຕົວຄວບຄຸມ - ໂດຍໃຊ້ເຫດການ OnNodeExpanded - ເພື່ອເຮັດໃຫ້ຕົ້ນໄມ້ສົມບູນແບບໄດນາມິກ.

### ໄວຍາກອນ:

svc.AddSubTree(parentnode: uno, flattree: any, opt withdatavalue: bool): bool

### ພາຣາມິເຕີ:

parentnode: ວັດຖຸ UNO ຂອງໂນດ, ປະເພດ com.sun.star.awt.tree.XMutableTreeNode.

flattree: ອາເຣສອງມິຕິທີ່ຈັດຮຽງຕາມຖັນທີ່ມີຄ່າທີ່ຈະສະແດງ. ອາເຣດັ່ງກ່າວສາມາດໄດ້ມາຈາກວິທີການ GetRows ຂອງບໍລິການ SFDatabases.Database. ເມື່ອລາຍການໃນອາເຣທີ່ມີຂໍ້ຄວາມທີ່ຈະສະແດງເປັນ Empty ຫຼື Null, ຈະບໍ່ມີການສ້າງໂນດຍ່ອຍໃໝ່ ແລະ ສ່ວນທີ່ເຫຼືອຂອງແຖວນັ້ນຈະຖືກຂ້າມໄປ.

          ຕົ້ນໄມ້ແບບແບນ (Flat tree)    >>>>    ຕົ້ນໄມ້ຍ່ອຍທີ່ໄດ້ຮັບ
          A1	B1	C1             |__   A1
          A1	B1	C2                   |__   B1
          A1	B2	C3                         |__  C1
          A2	B3	C4                         |__  C2
          A2	B3	C5                   |__   B2
          A3	B4	C6                         |__  C3
                                 |__   A2
                                       |__   B3
                                             |__  C4
                                             |__  C5
                                 |__   A3
                                       |__   B4
                                             |__  C6

withdatavalue: ເມື່ອໃຊ້ຄ່າເລີ່ມຕົ້ນ False, ທຸກໆຖັນຂອງ flattree ຈະບັນຈຸຂໍ້ຄວາມທີ່ຈະສະແດງໃນຕົວຄວບຄຸມຕົ້ນໄມ້. ເມື່ອເປັນ True, ຂໍ້ຄວາມທີ່ຈະສະແດງ (displayvalue) ຈະຢູ່ໃນຖັນ 0, 2, 4, ... ໃນຂະນະທີ່ຄ່າຂໍ້ມູນ (datavalue) ຈະຢູ່ໃນຖັນ 1, 3, 5, ...

### ຕົວຢ່າງ:

##### ໃນ Basic

          Dim myTree As Object, theRoot As Object, oDb As Object, vData As Variant
          Set myTree = myDialog.Controls("myTreeControl")
          Set theRoot = myTree.CreateRoot("By product category")
          Set oDb = CreateScriptService("SFDatabases.Database", "/home/.../mydatabase.odb")
          vData = oDb.GetRows("SELECT [Category].[Name], [Category].[ID], [Product].[Name], [Product].[ID] " _
              & "FROM [Category], [Product] WHERE [Product].[CategoryID] = [Category].[ID] " _
              & "ORDER BY [Category].[Name], [Product].[Name]")
          myTree.AddSubTree(theRoot, vData, WithDataValue := True)

##### ໃນ Python

         SQL_STMT = "SELECT [Category].[Name], [Category].[ID], [Product].[Name], [Product].[ID] \
             FROM [Category], [Product] WHERE [Product].[CategoryID] = [Category].[ID] \
             ORDER BY [Category].[Name], [Product].[Name]"
         tree = dlg.Controls('myTreeControl')
         root = tree.CreateRoot('By Product category')
         db = CreateScriptService('SFDatabases.Database', '/home/.../mydatabase.odb')
         sub_tree = db.GetRows(SQL_STMT)
         tree.AddSubTree(root, sub_tree, withdatavalue=True)

## CreateRoot

ສົ່ງຄືນໂນດຮາກໃໝ່ຂອງຕົວຄວບຄຸມຕົ້ນໄມ້ ເປັນວັດຖຸ UNO ຂອງໂນດປະເພດ com.sun.star.awt.tree.XMutableTreeNode. ຮາກຂອງຕົ້ນໄມ້ໃໝ່ຈະຖືກແຊກໄວ້ລຸ່ມໂນດຮາກທີ່ມີມາກ່ອນແລ້ວ. ເບິ່ງ XMutableTreeNode ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.

ວິທີການນີ້ອາດຈະຖືກເອີ້ນກ່ອນທີ່ຈະສະແດງກ່ອງໄດອາລັອກເພື່ອສ້າງຕົ້ນໄມ້ເລີ່ມຕົ້ນ. ມັນຍັງສາມາດຖືກເອີ້ນຈາກເຫດການຂອງໄດອາລັອກ ຫຼື ຕົວຄວບຄຸມເພື່ອເຮັດໃຫ້ຕົ້ນໄມ້ສົມບູນແບບໄດນາມິກ.

### ໄວຍາກອນ:

svc.CreateRoot(displayvalue: str, opt datavalue: any): uno

### ພາຣາມິເຕີ:

displayvalue: ຂໍ້ຄວາມທີ່ປະກົດຢູ່ໃນກ່ອງຕົວຄວບຄຸມຕົ້ນໄມ້.

datavalue: ຄ່າໃດໜຶ່ງທີ່ກ່ຽວຂ້ອງກັບໂນດໃໝ່. datavalue ອາດຈະເປັນຂໍ້ຄວາມ, ຕົວເລກ ຫຼື ວັນທີ. ໃຫ້ລະເວັ້ນອາຄິວເມັນນີ້ຫາກບໍ່ຈຳເປັນ.

### ຕົວຢ່າງ:

##### ໃນ Basic

          Dim myTree As Object, myNode As Object
          Set myTree = myDialog.Controls("myTreeControl")
          Set myNode = myTree.CreateRoot("Tree starts here ...")

##### ໃນ Python

         tree = dlg.Controls('myTreeControl')
         node = tree.CreateRoot('Tree starts here ...')

## FindNode

ທ່ອງໄປໃນຕົ້ນໄມ້ ແລະ ຄົ້ນຫາໂນດທີ່ກົງກັບເງື່ອນໄຂບາງຢ່າງແບບຊ້ຳຄືນ (recursively) ໂດຍເລີ່ມຈາກຮາກ. ພຽງແຕ່ 1 ເງື່ອນໄຂທີ່ກົງກັນກໍພຽງພໍ - ບໍ່ວ່າຈະມີຄ່າສະແດງທີ່ກົງກັບຮູບແບບ displayvalue ຫຼື ມີຄ່າຂໍ້ມູນເທົ່າກັບ datavalue. ການປຽບທຽບອາດຈະມີການແຍກຕົວອັກສອນນ້ອຍ-ໃຫຍ່ ຫຼື ບໍ່ກໍໄດ້. ລາຍການທຳອິດທີ່ກົງກັນຈະຖືກສົ່ງຄືນເປັນວັດຖຸ UNO ຂອງໂນດປະເພດ com.sun.star.awt.tree.XMutableTreeNode. ເບິ່ງ XMutableTreeNode ໃນເອກະສານ API ສຳລັບຂໍ້ມູນລະອຽດ.

ເມື່ອບໍ່ພົບ, ວິທີການນີ້ຈະສົ່ງຄືນ Nothing, ເຊິ່ງສາມາດກວດສອບໄດ້ດ້ວຍຟັງຊັນ IsNull().

ວິທີການນີ້ອາດຈະຖືກເອີ້ນກ່ອນທີ່ຈະສະແດງກ່ອງໄດອາລັອກເພື່ອສ້າງຕົ້ນໄມ້ເລີ່ມຕົ້ນ. ມັນຍັງສາມາດຖືກເອີ້ນຈາກເຫດການຂອງໄດອາລັອກ ຫຼື ຕົວຄວບຄຸມ.

### ໄວຍາກອນ:

svc.FindNode(displayvalue: str = '', opt datavalue: any, casesensitive = False): uno

### ພາຣາມິເຕີ:

ຕ້ອງລະບຸອາຄິວເມັນຢ່າງໜ້ອຍໜຶ່ງຢ່າງລະຫວ່າງ displayvalue ຫຼື datavalue. ຖ້າລະບຸທັງສອງ, ພຽງແຕ່ອັນໃດອັນໜຶ່ງກົງກັນກໍພຽງພໍທີ່ຈະເລືອກໂນດນັ້ນ.

displayvalue: ຮູບແບບທີ່ຕ້ອງການໃຫ້ກົງກັນ. ເບິ່ງວິທີການ SF_String.IsLike() ສຳລັບລາຍການຂອງຕົວແທນ (wildcards) ທີ່ເປັນໄປໄດ້. ເມື່ອເທົ່າກັບຂໍ້ຄວາມທີ່ມີຄວາມຍາວເປັນສູນ (ຄ່າເລີ່ມຕົ້ນ), ຄ່າສະແດງນີ້ຈະບໍ່ຖືກຄົ້ນຫາ.

datavalue: ຄ່າໃດໜຶ່ງທີ່ກ່ຽວຂ້ອງກັບໂນດໃໝ່. datavalue ອາດຈະເປັນຂໍ້ຄວາມ, ຕົວເລກ ຫຼື ວັນທີ. ໃຫ້ລະເວັ້ນອາຄິວເມັນນີ້ຫາກບໍ່ຈຳເປັນ.

casesensitive: ຄ່າເລີ່ມຕົ້ນແມ່ນ False

### ຕົວຢ່າງ:

##### ໃນ Basic

          Dim myTree As Object, myNode As Object
          Set myTree = myDialog.Controls("myTreeControl")
          Set myNode = myTree.FindNode("*Sophie*", CaseSensitive := True)

##### ໃນ Python

         tree = dlg.Controls('myTreeControl')
         node = FindNode('*Sophie*', casesensitive=True)
         if node is None:
             # ...

## Resize

ຍ້າຍມຸມຊ້າຍເທິງຂອງຕົວຄວບຄຸມໄດອາລັອກໄປຫາພິກັດໃໝ່ ແລະ/ຫຼື ປັບປ່ຽນຂະໜາດຂອງມັນ. ສົ່ງຄືນ True ຖ້າການປ່ຽນຂະໜາດສຳເລັດ.

### ໄວຍາກອນ:

svc.Resize(opt Left: int, opt Top: int, opt Width: int, opt Height: int): bool

### ພາຣາມິເຕີ:

ໄລຍະຫ່າງທັງໝົດຈະສະແດງເປັນ ຫົວໜ່ວຍ Map AppFont ແລະ ຖືກວັດແທກຈາກມຸມຊ້າຍເທິງຂອງໄດອາລັອກຫຼັກ. ຖ້າບໍ່ມີອາຄິວເມັນ, ວິທີການນີ້ຈະປ່ຽນຂະໜາດຕົວຄວບຄຸມເປັນ "ຂະໜາດທີ່ເໝາະສົມ", ເຊິ່ງເປັນຂະໜາດທີ່ປັບຕາມເນື້ອໃນຕົວຈິງຂອງມັນ. ອາຄິວເມັນທີ່ຂາດໄປຈະບໍ່ຖືກປ່ຽນແປງ.

ຊ້າຍ: ໄລຍະຫ່າງຕາມແນວນອນຈາກມຸມຊ້າຍເທິງ

ເທິງ: ໄລຍະຫ່າງຕາມແນວຕັ້ງຈາກມຸມຊ້າຍເທິງ

ຄວາມກວ້າງ: ຄວາມກວ້າງຕາມແນວນອນຂອງຮູບສີ່ແຈສາກທີ່ບັນຈຸຕົວຄວບຄຸມ

ຄວາມສູງ: ຄວາມສູງຕາມແນວຕັ້ງຂອງຮູບສີ່ແຈສາກທີ່ບັນຈຸຕົວຄວບຄຸມ

### ຕົວຢ່າງ:

##### ໃນ Basic

          Dim oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.Resize(100, 200, Height:=6000) ' ຄວາມກວ້າງບໍ່ຖືກປ່ຽນແປງ

##### ໃນ Python

          dlg = CreateScriptService('Dialog', None, None, 'myDialog')
          ctrl = dlg.Controls('thisControl')
          ctrl.Resize(300, 200, 1500)  # ຄວາມສູງບໍ່ຖືກປ່ຽນແປງ

## SetFocus

ຕັ້ງໂຟກັສໃສ່ຕົວຄວບຄຸມ. ສົ່ງຄືນ True ຖ້າການຕັ້ງໂຟກັສສຳເລັດ.

ວິທີການນີ້ມັກຈະຖືກເອີ້ນຈາກເຫດການຂອງໄດອາລັອກ ຫຼື ຕົວຄວບຄຸມ.

### ໄວຍາກອນ:

svc.SetFocus(): bool

### ຕົວຢ່າງ:

##### ໃນ Basic

          Dim oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.SetFocus()

##### ໃນ Python

          dlg = CreateScriptService('Dialog', None, None, 'myDialog')
          ctrl = dlg.Controls('thisControl')
          ctrl.SetFocus()

## SetTableData

ຕື່ມຂໍ້ມູນໃສ່ TableControl ດ້ວຍຂໍ້ມູນທີ່ກຳນົດໃຫ້. ຂໍ້ມູນທີ່ມີຢູ່ກ່ອນແລ້ວທັງໝົດຈະຖືກລຶບອອກກ່ອນທີ່ຈະແຊກຂໍ້ມູນໃໝ່ທີ່ສົ່ງມາເປັນອາຄິວເມັນ.

ເມື່ອ TableControl ຖືກເພີ່ມເຂົ້າໃນໄດອາລັອກ, ທ່ານສາມາດໃຊ້ Basic IDE ເພື່ອກຳນົດວ່າຈະສະແດງສ່ວນຫົວຂອງຖັນ ແລະ ແຖວໃນຕາຕະລາງຫຼືບໍ່. ຖ້າ TableControl ມີສ່ວນຫົວຖັນ ແລະ/ຫຼື ແຖວ, ຖັນ ແລະ/ຫຼື ແຖວທຳອິດໃນອາເຣຂໍ້ມູນທີ່ໃຫ້ມາຈະຖືກໃຊ້ເປັນປ້າຍຊື່ສຳລັບສ່ວນຫົວຕາຕະລາງ.

ວິທີການນີ້ຈະສົ່ງຄືນຄ່າ True ເມື່ອສຳເລັດ.

### ໄວຍາກອນ:

svc.SetTableData(dataarray: any[0..*, 0..*], widths: int[0..*], alignments: str, RowHeaderWidth = 10): bool

### ພາຣາມິເຕີ:

dataarray: ຂໍ້ມູນທີ່ຈະປ້ອນເຂົ້າໃນຕາຕະລາງ ເຊິ່ງສະແດງເປັນ Array ຂອງ Array ໃນ Basic ຫຼື ເປັນ tuple ຂອງ tuple ໃນ Python. ຂໍ້ມູນຕ້ອງລວມເຖິງສ່ວນຫົວຖັນ ແລະ ແຖວ ຫາກຕ້ອງການໃຫ້ພວກມັນສະແດງໃນ TableControl.

widths: ອາເຣທີ່ບັນຈຸຄວາມກວ້າງສຳພັດຂອງແຕ່ລະຖັນ. ເວົ້າອີກຢ່າງໜຶ່ງ, widths = (1, 2) ໝາຍຄວາມວ່າຖັນທີສອງກວ້າງເປັນສອງເທົ່າຂອງຖັນທຳອິດ. ຖ້າຈຳນວນຄ່າໃນອາເຣໜ້ອຍກວ່າຈຳນວນຖັນໃນຕາຕະລາງ, ຄ່າສຸດທ້າຍໃນອາເຣຈະຖືກໃຊ້ເພື່ອກຳນົດຄວາມກວ້າງຂອງຖັນທີ່ເຫຼືອ.

alignments: ກຳນົດການຈັດວາງໃນແຕ່ລະຖັນເປັນຂໍ້ຄວາມ ໂດຍແຕ່ລະຕົວອັກສອນສາມາດເປັນ "L" (ຊ້າຍ), "C" (ກາງ), "R" (ຂວາ) ຫຼື " " (ຊ່ອງວ່າງ, ຄ່າເລີ່ມຕົ້ນ, ໝາຍເຖິງຊ້າຍສຳລັບຂໍ້ຄວາມ ແລະ ຂວາສຳລັບຕົວເລກ). ຖ້າຄວາມຍາວຂອງຂໍ້ຄວາມສັ້ນກວ່າຈຳນວນຖັນໃນຕາຕະລາງ, ຕົວອັກສອນສຸດທ້າຍໃນຂໍ້ຄວາມຈະຖືກໃຊ້ເພື່ອກຳນົດການຈັດວາງຂອງຖັນທີ່ເຫຼືອ.

RowHeaderWidth: ຄວາມກວ້າງຂອງຖັນສ່ວນຫົວແຖວ ສະແດງເປັນ ຫົວໜ່ວຍ Map AppFont. ຄ່າເລີ່ມຕົ້ນ = 10. ອາຄິວເມັນນີ້ຈະຖືກລະເລີຍຫາກ TableControl ບໍ່ມີສ່ວນຫົວແຖວ.

### ຕົວຢ່າງ:

##### ໃນ Basic

ຕົວຢ່າງຕໍ່ໄປນີ້ສົມມຸດວ່າໄດອາລັອກ myDialog ມີ TableControl ຊື່ Grid1 ໂດຍມີຄຸນສົມບັດ "Show row header" ແລະ "Show column header" ຕັ້ງເປັນ "Yes".

         Dim myDialog As Object, oTable As Object, tableData As Variant
         myDialog = CreateScriptService("Dialog", "GlobalScope", "Standard", "myDialog")
         oTable = myDialog.Controls("Grid1")
         tableData = Array("Column A", "Column B", "Column C")
         tableData = SF_Array.AppendRow(tableData, Array("Row 1", 1, 2))
         tableData = SF_Array.AppendRow(tableData, Array("Row 2", 3, 4))
         tableData = SF_Array.AppendRow(tableData, Array("Row 3", 5, 6))
         vAlignments = "LCC"
         vWidths = Array(2, 1, 1)
         oTable.SetTableData(tableData, vWidths, vAlignments)
         myDialog.Execute()

ຄຸນສົມບັດ Value ສົ່ງຄືນແຖວທີ່ຖືກເລືອກໃນຕາຕະລາງ. ຖ້າບໍ່ມີແຖວໃດຖືກເລືອກ, ຈະສົ່ງຄືນວັດຖຸ Array ທີ່ຫວ່າງເປົ່າ. ໂຄ້ດຕົວຢ່າງລຸ່ມນີ້ສະແດງວິທີກວດສອບວ່າມີແຖວໃດຖືກເລືອກໃນຕາຕະລາງຫຼືບໍ່.

         rowValues = oTable.Value
         If UBound(rowValues) < 0 Then
             MsgBox "ບໍ່ມີແຖວຖືກເລືອກ."
         Else
             MsgBox "ແຖວທີ " & oTable.ListIndex & " ຖືກເລືອກແລ້ວ."
         End If

##### ໃນ Python

         dlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "myDialog")
         table_control = dlg.Controls("Grid1")
         table_data = (("Column A", "Column B", "Column C"),
                       ("Row 1", 1, 2),
                       ("Row 2", 3, 4),
                       ("Row 3", 5, 6))
         alignments = "LCC"
         widths = (100, 50, 50)
         table_control.SetTableData(table_data, widths, alignments)
         dlg.Execute()

         bas = CreateScriptService("Basic")
         row_values = table_control.Value
         if len(row_values) == 0:
             bas.MsgBox("No row selected.")
         else:
             bas.MsgBox(f"Row {table_control.ListIndex} is selected.")

## WriteLine

ເພີ່ມແຖວໃໝ່ໃສ່ທ້າຍຂອງຊ່ອງຂໍ້ຄວາມຫຼາຍແຖວ (multiline text field). ຕົວອັກສອນຂຶ້ນແຖວໃໝ່ຈະຖືກແຊກເຂົ້າຕາມຄວາມເໝາະສົມ. ວິທີການນີ້ສົ່ງຄືນ True ເມື່ອສຳເລັດ.

ຈະເກີດຂໍ້ຜິດພາດຂຶ້ນ ຫາກຕົວຄວບຄຸມຕົວຈິງບໍ່ແມ່ນປະເພດ TextField ຫຼື ບໍ່ແມ່ນແບບຫຼາຍແຖວ.

### ໄວຍາກອນ:

svc.WriteLine(opt line: str): bool

### ພາຣາມິເຕີ:

Line: ຂໍ້ຄວາມທີ່ຈະແຊກເຂົ້າ. ຄ່າເລີ່ມຕົ້ນແມ່ນແຖວຫວ່າງເປົ່າ.

### ຕົວຢ່າງ:

##### ໃນ Basic

          Dim oDlg As Object, oControl As Object
          Set oDlg = CreateScriptService("SFDialogs.Dialog",,, "myDialog")
          Set oControl = oDlg.Controls("thisControl")
          oControl.WriteLine("a new line")

##### ໃນ Python

         dlg = CreateScriptService('SFDialogs.Dialog', None, None, 'myDialog')
         ctrl = dlg.Controls('thisControl')
         ctr.WriteLine("a new line")

ຣູທີນ ຫຼື ຕົວລະບຸ Basic ຂອງ ScriptForge ທັງໝົດທີ່ຂຶ້ນຕົ້ນດ້ວຍເຄື່ອງໝາຍຂີດກ້ອງ "_" ແມ່ນສະຫງວນໄວ້ສຳລັບໃຊ້ພາຍໃນ. ພວກມັນບໍ່ໄດ້ມີໄວ້ໃຫ້ໃຊ້ໃນມາໂຄຣ Basic ຫຼື ສະຄຣິບ Python.

ຫົວຂໍ້ທີ່ກ່ຽວຂ້ອງ

ບໍລິການ SFDialogs.Dialog

ບໍລິການ ScriptForge.String

ບໍລິການ ScriptForge.UI