SSブログ

gambas2: Listview を使う (2) [Gambas]

今度はファイルの一覧から指定してファイルを削除する方法。

ListView から特定のアイテムを削除するには、lvwMain.Remove(KEY)
で指定したキーを持つアイテムが削除される。

ListView から特定のアイテムを削除するには、lvwMain.Remove(KEY)
で指定したキーを持つアイテムが削除される。

で、削除ボタンが押された時にこれを働くようにしたいので、
GUI エディタを使ってフォームにボタンを追加したら、ボタン上
で右クリックして、イベント → Click を選ぶ。

そうするとコードエディタが開くので、そこにこんな風に記述する。
IF ListView1.Current <> NULL THEN
   ListView1.Remove(ListView1.Current.Key)
ENDIF 

こうすればボタンを押すした時に選択されたアイテムを消せる。

ただし ListView のプロパティで mode に multiple を指定してると、
話はもうちょっと面倒に。

Screenshot.png

複数選択を可能にした状態では上と同じやり方だと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 の処理はちょっとだけ面倒だけと、
# 使い勝手は良くなるので、大事かなと。
タグ:Vine Gambas
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。