跳到内容

从 Zip/SaveSettings 开始学习 Gambas 编程

来自 Wikibooks,开放书籍,构建开放世界

本节建立在上一页的单选按钮练习的基础上。

为单选按钮添加设置保存

[编辑 | 编辑源代码]

Gambas 提供了一种简洁的方式来保存设置。设置可以是上次数据文件的路径,这样下次程序启动时就不必重新定位了。它们可以是用户输入或选择的任何内容,您希望下次记住它们。这里我们将保存所选的单选按钮。

首先,确保设置组件已启用,作为您项目的一部分。启动一个新的 QT 图形项目后,选择项目菜单 > 属性…,查找 gb.settings 组件并选中它

Gambas Components window, looking for the Settings component

使用与上一页 (RadioButtons) 相同的表单,包含水果和交通按钮,但将代码更改为以下内容

Public Sub rbTransport_Click()
  Settings["Radiobuttons/Transport"] = Last.Text
End

Public Sub rbFruit_Click()
  Settings["Radiobuttons/Fruit"] = Last.Text
End

Public Sub Form_Open()

  Select Case Settings["Radiobuttons/Transport"]
    Case "Road"
      rbRoad.value = True
    Case "Sea"
      rbSea.Value = True
    Case "Air"
      rbAir.value = True
  End Select

  Select Case Settings["Radiobuttons/Fruit"]
    Case "Apple"
      rbApple.value = True
    Case "Orange"
      rbOrange.Value = True
    Case "Pear"
      rbPear.value = True
  End Select

End

运行程序。选择一种交通工具和一种水果。关闭程序。再次运行它:您的选择已恢复。您可以在表单关闭时保存您的设置。Gambas wiki 有 这个例子,展示了如何将窗口恢复到上次拖动到的位置,以及上次程序运行时调整到的尺寸

Public Sub Form_Open()  'Restore settings
  Me.Top = Settings["Window/Top", Me.Top]
  Me.Left = Settings["Window/Left", Me.Left]
  Me.Height = Settings["Window/Height", Me.Height]
  Me.Width = Settings["Window/Width", Me.Width]
End

Public Sub Form_Close()  'Save settings
  Settings["Window/Top"] = Me.Top
  Settings["Window/Left"] = Me.Left
  Settings["Window/Height"] = Me.Height
  Settings["Window/Width"] = Me.Width
End

指的是当前表单。

这些设置实际上存储在哪里?在您的主文件夹中有一个隐藏的用于设置的文件夹,名为 .config 。在 Linux 中,任何以点开头的文件或文件夹都是隐藏的。在 .config 中查找 Gambas3 文件夹。在其中,您将找到一个与您的程序同名的文本文件。打开它,您将看到设置文件。

Gambas Settings File example showing in Kate
Radio Buttons 应用程序的设置文本文件


设置在标题下整齐排列。现在您可以看到带有斜杠的字符串的重要性:第一个项目是标题。Settings["Radiobuttons/Fruit"]Radiobuttons 标题下的 Fruit 设置。

您需要注意:第一次运行程序时可能没有设置文件。如果您的表单打开并查找特定设置,而设置文件不存在,则会出现问题。测试空字符串(null)。

保存颜色、复选框和 TableView 的内容

[编辑 | 编辑源代码]

Saving settings for other objects in Gambas Saving settings for other objects in Gambas, running

表单上有一个复选框 cbSurnameFirst,一个面板 Panel1,一个带有文本“选择颜色:”的标签,一个颜色按钮 ColorButton1,一个标签 Label1,其文本为“填充”,颜色为蓝色并带下划线,以及一个表格视图 tv1

运行程序。用随机字母填充表格视图。选择一种颜色。突出显示完全无用的按钮“姓氏在前”。关闭程序。再次运行程序。设置已恢复。

Public Sub ColorButton1_Change()
  Panel1.Background = ColorButton1.Color
  Settings["Colours/PanelColour"] = Panel1.Background
End

Public Sub Label1_MouseDown()

  tv1.Columns.count = 2
  Settings["TableView/Columns"] = tv1.Columns.count
  tv1.Rows.count = 4
  Settings["TableView/Rows"] = tv1.Rows.count
  For i As Integer = 0 To tv1.Rows.Max
    For j As Integer = 0 To tv1.Columns.Max
      tv1[i, j].text = Chr(Rand(Asc("A"), Asc("Z")))
      Settings["TableView/" & i & "," & j] = tv1[i, j].text
    Next
  Next

End

Public Sub cbSurnameFirst_Click()
  Settings["Names/SurnameFirst"] = cbSurnameFirst.Value
End

Public Sub Form_Open() 'restore settings

  Dim Surname As String = Settings["Names/SurnameFirst"]
  cbSurnameFirst.Value = If(IsNull(Surname), False, Surname)
  Dim nCols As String = Settings["TableView/Columns"]
  tv1.Columns.count = If(IsNull(nCols), 2, nCols)
  Dim nRows As String = Settings["TableView/Rows"]
  tv1.Rows.count = If(IsNull(nRows), 4, nRows)
  For i As Integer = 0 To tv1.Rows.Max
    For j As Integer = 0 To tv1.Columns.Max
      tv1[i, j].text = Settings["TableView/" & i & "," & j]
    Next
  Next
  Dim colour As String = Settings["Colours/PanelColour"]
  Panel1.Background = If(IsNull(colour), &hFFFFFF, colour)

End

IF 函数

[编辑 | 编辑源代码]

IF...THEN...ELSE 语句有一种特殊形式,可以节省编写多行代码的工作。它以函数的形式存在。以下两者是等效的

if IsNull(colour) Then
   Panel1.Background = &hFFFFFF 'white
Else
   Panel1.Background = colour
EndIf

等效于

Panel1.Background = If(IsNull(colour), &hFFFFFF, colour)

在一行语句中,If(IsNull(colour), &hFFFFFF, colour) 是一个整体。它是一个代表颜色的数字。哪种颜色?括号中有三个项目:一个结果为 truefalse 的测试,如果测试结果为 true 则为答案,如果测试结果为 false 则为答案。模式为 if( TrueOrFalseThing, ValueIfTrue, ValueIfFalse)&hFFFFFFWhite 的十六进制数(所有红、绿、蓝 LED 灯都完全开启)。

这是一个示例设置文件。左侧复选框未选中。右侧复选框已选中。

Settings text file showing an unticked checkbox Settings text file showing a ticked checkbox


从 Zip 开始学习 Gambas 编程
 ← RadioButtons SaveSettings Modules → 
华夏公益教科书