tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルリストビューで選択項目削除後にマウス押下状態
記事No15297
投稿日: 2011/08/15(Mon) 14:37
投稿者流星バナナ
 いつも参考にさせていただいています。
 以下のことで悩んでいます。
 対処法等ありましたらご教示願います。


 複数選択可能なリストビューで選択後、ポップアップ
 メニューで選択項目のみ、削除しているのですが、
 削除後にマウス押下状態(マウスの左ボタンを押しながら、
 マウスを動かしている状態)に勝手になってしまいます。
 
 環境 WINXP SP3 VB6SP6

 ■サンプルコード■
 フォームにListViewコントロールを貼付,
 メニューエディタで「mnuR」、「mnuDelete」を作成する
 ※「mnuDelete」は「mnuR」に含まれるメニュー

    Private Sub Form_Load()
      Dim obItem As Object
      With ListView1
         .ColumnHeaders.Add 1, , "TEST1"
         .ColumnHeaders.Add 2, , "TEST2"
        .View = lvwReport
         .MultiSelect = True
            
         Set obItem = .ListItems.Add(, , "あああ")
         Set obItem = .ListItems.Add(, , "いいい")
         Set obItem = .ListItems.Add(, , "ううう")
         Set obItem = .ListItems.Add(, , "えええ")
        Set obItem = .ListItems.Add(, , "おおお")
      End With
          
    End Sub

    Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, _
                                  x As Single, y As Single)
       If Button = vbRightButton Then
          'ポップアップメニューの表示
          PopupMenu mnuR, vbPopupMenuRightButton
       End If
    End Sub

    '■選択をリストから削除する
    Private Sub mnuDelete_Click()
       Dim l          As Long
       Dim myListItem As ListItem
          
       With ListView1
         For l = .ListItems.Count To 1 Step -1
            If .ListItems(l).Selected Then
               .ListItems.Remove (l)
            End If
         Next
       End With

    End Sub

[ツリー表示へ]
タイトルRe: リストビューで選択項目削除後にマウス押下状態
記事No15298
投稿日: 2011/08/15(Mon) 22:20
投稿者魔界の仮面弁士
>  複数選択可能なリストビューで選択後、ポップアップ
>  メニューで選択項目のみ、削除しているのですが、
>  削除後にマウス押下状態(マウスの左ボタンを押しながら、
>  マウスを動かしている状態)に勝手になってしまいます。
現象が再現せずに悩みました。

Ctrl + マウスクリックで複数選択した場合は再現しませんでしたが、
マウスドラッグで複数選択してから、右クリックでコンテキストメニューを
表示した場合には、ドラッグでの矩形選択モードになってしまうようですね。


> 対処法等ありましたらご教示願います。
ドラッグをキャンセルしてやれば良いのかも。

  PopupMenu mnuR, vbPopupMenuRightButton
  ListView1.Enabled = False
  ListView1.Enabled = True
  ListView1.SetFocus


> .ListItems.Remove (l)
戻り値の無いメソッドを呼ぶ際、括弧はつけません。
正しくは
 .ListItems.Remove l
と記述することになります。


もしも括弧を付けたいなら、
 Call .ListItems.Remove(l)
のように、Call ステートメントを併用しましょう。

[ツリー表示へ]
タイトル[解決] リストビューで選択項目削除後にマウス押下状態
記事No15299
投稿日: 2011/08/16(Tue) 15:40
投稿者流星バナナ
> 現象が再現せずに悩みました。
説明不足で失礼しました。

> ドラッグをキャンセルしてやれば良いのかも。
>
>   PopupMenu mnuR, vbPopupMenuRightButton
>   ListView1.Enabled = False
>   ListView1.Enabled = True
>   ListView1.SetFocus

おかげで解決しました。
ありがとうございました。

[ツリー表示へ]