跳轉到內容

從 Zip/上下文選單程式設計 Gambas

來自華夏公益教科書,開放的書籍,為開放的世界

在設計時建立上下文選單

[編輯 | 編輯原始碼]

當您右鍵單擊 tableview 時,還有另一種方法可以建立上下文選單:不是像我們所做的那樣在程式碼中建立,而是在設計時建立。您仍然需要編寫程式碼來處理選單項單擊事件,但您避免了所有類似於 mn = New Menu(Me)su = New Menu(mn) As "MenuCopyTable" 的 New Menuitem 語句。只需使用選單編輯器建立一個包含所有選單項的新選單即可。此選單將出現在選單欄上,因此要避免這種情況,請將其設為不可見(請參見下面的 Visible 複選框)。

這是建立上下文選單的一種更簡單的方法。如果您在啟動應用程式之前就知道選單是什麼樣子,它將起作用。如果您需要根據輸入的內容來建立選單,則必須在程式碼中建立選單並使用 New 運算子。

Gambas — Making Menus as Design Time

對 GridView 或 TableView 進行排序

[編輯 | 編輯原始碼]

沒有內建的排序功能。我希望每個 TableView 都附帶一個方法,例如 TableView_Sort(Column, Direction, NumericOrNot),但實際上沒有。線上維基上有一個很好的排序方法,這裡,但遺憾的是,它對包含數字的列排序不正確。例如,10 在 2 之前,因為“1”在字典中位於“2”之前。字串“10”小於字串“2”,即使數字十大於數字二。

(感謝論壇的 fgores、Lee Davidson 和 Gianluigi 提供的此方法。)

因此,這是我的方法——有點原始,但它有效。想法是遍歷 tableview 的每一行,將該行中的單元格收集到一個字串中,並在每個單元格之間新增一個分隔符,並將決定排序順序的項放在每個字串的開頭。對陣列進行排序,然後將每一行解包回 tableview。換句話說,將每一行打包到一個字串中,對字串進行排序,然後解包每一行。使用任何罕見且不尋常的字元作為欄位分隔符。這裡使用波浪號 (~)。

Public Sub tv1_ColumnClick(Column As Integer)
  tv1.Save 'Calls the Save event in case the user clicked col heading without pressing Enter
  SortTable(tv1, Column, tv1.Columns.Ascending, (Column = 1))
End

Public Sub SortTable(TheTable As TableView, Column As Integer, Ascending As Boolean, Numeric As Boolean)

  Dim z As New String[]
  Dim y As New String[]
  Dim s As String
  Dim i, j As Integer

  For i = 0 To TheTable.Rows.Max
      If Numeric Then
        s = TheTable[i, Column].text 'next line pads it with leading zeros
        s = String$(5 - Len(s), "0") 'So 23 becomes 00023, for example. Works up to 99999
      Else
        s = TheTable[i, Column].text
      Endif
    For j = 0 To TheTable.Columns.Max
      s &= "~" & TheTable[i, j].text
    Next
    z.add(s)
  Next

  If Ascending Then z.Sort(gb.Ascent) Else z.Sort(gb.Descent) 'sort

  For i = 0 To z.Max 'unpack the array
    y = Split(z[i], "~")
    For j = 1 To y.Max 'skip the first item, which is the sort key
      TheTable[i, j - 1].text = y[j] 'but fill the first column
    Next
  Next
End
從 Zip 程式設計 Gambas
 ← 窗體排列 上下文選單 ASCII → 
華夏公益教科書