gambas2: Listview を使う (2) [Gambas]
今度はファイルの一覧から指定してファイルを削除する方法。
ListView から特定のアイテムを削除するには、lvwMain.Remove(KEY)
で指定したキーを持つアイテムが削除される。
ListView から特定のアイテムを削除するには、lvwMain.Remove(KEY)
で指定したキーを持つアイテムが削除される。
で、削除ボタンが押された時にこれを働くようにしたいので、
GUI エディタを使ってフォームにボタンを追加したら、ボタン上
で右クリックして、イベント → Click を選ぶ。
そうするとコードエディタが開くので、そこにこんな風に記述する。
こうすればボタンを押すした時に選択されたアイテムを消せる。
ただし ListView のプロパティで mode に multiple を指定してると、
話はもうちょっと面倒に。
複数選択を可能にした状態では上と同じやり方だと1行しか削除
できないので、こんな感じでループして、選択行を一旦配列に
放り込んでから削除処理する必要がある。
ListView には内部的な(表には見えない)カーソルがあるので、
これを使って複数あるアイテムの状態を確認している。
(内部的なカーソルなのでユーザが選択した行には変化なし)
ちなみにいきなり選んだ行を削除しちゃうと、内部的なカーソルの
位置が消えちゃうらしくエラーになるので、1回目のループで選択
された行のキーを配列に格納して、2回目のループでこれを削除
している。
# multiple selection の処理はちょっとだけ面倒だけと、
# 使い勝手は良くなるので、大事かなと。
ListView から特定のアイテムを削除するには、lvwMain.Remove(KEY)
で指定したキーを持つアイテムが削除される。
ListView から特定のアイテムを削除するには、lvwMain.Remove(KEY)
で指定したキーを持つアイテムが削除される。
で、削除ボタンが押された時にこれを働くようにしたいので、
GUI エディタを使ってフォームにボタンを追加したら、ボタン上
で右クリックして、イベント → Click を選ぶ。
そうするとコードエディタが開くので、そこにこんな風に記述する。
IF ListView1.Current <> NULL THEN ListView1.Remove(ListView1.Current.Key) ENDIF
こうすればボタンを押すした時に選択されたアイテムを消せる。
ただし ListView のプロパティで mode に multiple を指定してると、
話はもうちょっと面倒に。
複数選択を可能にした状態では上と同じやり方だと1行しか削除
できないので、こんな感じでループして、選択行を一旦配列に
放り込んでから削除処理する必要がある。
PUBLIC SUB btnRemove_Click() DIM aList AS NEW String[] DIM i AS Integer ' check selected line and store key to string array WITH lvwMain IF .Count > 0 THEN .MoveFirst FOR i = 1 TO .Count IF .Item.Selected = TRUE THEN aList.Add(.Item.Key) .MoveNext NEXT ENDIF ' then remove selected line IF aList.Count > 0 THEN FOR i = 0 TO aList.Count - 1 .Remove(aList[i]) NEXT ENDIF END WITH END
ListView には内部的な(表には見えない)カーソルがあるので、
これを使って複数あるアイテムの状態を確認している。
(内部的なカーソルなのでユーザが選択した行には変化なし)
ちなみにいきなり選んだ行を削除しちゃうと、内部的なカーソルの
位置が消えちゃうらしくエラーになるので、1回目のループで選択
された行のキーを配列に格納して、2回目のループでこれを削除
している。
# multiple selection の処理はちょっとだけ面倒だけと、
# 使い勝手は良くなるので、大事かなと。
コメント 0