ギリギリ行けるお一人様のライン

 ListViewに表示する情報が1件しかないとき、その情報が常に選択された状態なので、
困っています。

 1件しかなくても、選択したり、選択を解除したりすることは出来ないのでしょうか?

 または、ListViewでは出来ないけど、他のコントロールなら出来ると言う情報があり
ましたらぜひ教えてください。

 よろしくお願いします。

A 回答 (4件)

失礼しました


× HitItem
○ HitTest
でした。

Private Sub Form_Load()
  Dim i    As Integer
  
  With Me.ListView1
    .View = lvwList       '//表示形式:一覧
    .HideSelection = False   '//リストビューがフォーカスを失っても、選択状態を保持する
    .MultiSelect = True     '//複数選択可能
    
    'ダミーデータの登録
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.Add , , "Dmy Data" & i
    Next i
 
  End With
End Sub

Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  Dim itmX  As ListItem
  
  With Me.ListView1
    'マウス位置のアイテムを取得
    Set itmX = .HitTest(x, y)
    '取得できたなら未処理
    If Not (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '現在選択中のアイテムを取得
    Set itmX = .SelectedItem
    '取得できなかったなら未処理
    If (itmX Is Nothing) Then
      GoTo PGMEND
    End If
    
    '選択解除
    Set .SelectedItem = Nothing
    itmX.Selected = False
  End With
  
PGMEND:
  Set itmX = Nothing
End Sub
    • good
    • 1
この回答へのお礼

完璧です!

どうもありがとうございました。
助かりました。

お礼日時:2003/01/14 13:57

以前にエクスプローラのイベントを取得したいと思って、様々なメーリングリストを調べた経験があります。


explorer.exeの話題が出たので、ついでに勝手に補足しますw

>explorer.exe の右ペインのリスト
これは、エクスプローラ用のリストビューです。
構造はVBのリストビューと全く同じです。

サンプルで書いた
.HideSelection = False
属性を持っています。

さらにマウスダウン時に、C言語で言うHitItemマクロで、アイテムの上でのクリックかどうかを調査して、わたしのサンプルと同様なことを行っております。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
教えて頂いたサンプル通りにやってみました。

その上で、やはりエクスプローラーのような選択/選択解除が一番使い易いかな
と思い、HitItemについて調べているのですが、全然検索に引っかかりません。
他に何かキーワードがありましたら教えてください。

よろしくお願いします。

お礼日時:2003/01/14 10:14

その ListView のことは、知らないんですが、


普通(explorer.exe の右ペインのリストなど)は、
アイテムじゃないところ(余白)をクリックすると、
選択解除できます。
    • good
    • 0

Private Sub Command1_Click()


  Dim itmX  As ListItem

  With Me.ListView1
    Set itmX = .SelectedItem
    If itmX Is Nothing Then
      Set .SelectedItem = Me.ListView1.ListItems(1)
    Else
      Set .SelectedItem = Nothing
      itmX.Selected = False
    End If
  End With
  
  Set itmX = Nothing
End Sub

Private Sub Form_Load()
  Dim i    As Integer
    
  With Me.ListView1
    .View = lvwReport
    .HideSelection = False
    
    .ColumnHeaders.Add , , "ヘッダ"
    For i = 1 To 10
      Me.ListView1.ListItems.Add , , "Dmy Data" & i
    Next i
  
  End With
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A