今だけ人気マンガ100円レンタル特集♪

やりたいことは、エクスプローラのようなアイテムのドラッグ&ドロップです。
VB付属のリストビューをそのまま使うと、大きいアイコンで表示した時、複数選択してドラッグしても動くアイテムは、1つとなってしまいます。
複数アイテムを動かす方法を知っている方がいましたら教えてほしいのですが。

環境は、
Windows2000SP3
VisualBasic6SP5
です。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>ドラッグしても動くアイテムは、1つ


確かにそうです。
これはリストビューの仕様だったと思います。

「エクスプローラ風に、CtrlやShiftを組み合わせて複数選択されたアイテムを操作したい」
という事だと思うけど、エクスプローラのリストビューは、エクスプローラ用に加工されたリストビューで、複数選択されたとき、ヒットテストマクロを行いながら、エクスプローラ用の内部ライブラリへアクセスして処理を行っていたと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=442310

この回答への補足

やはり、VBに付属のリストビューで実現するのは、
大変なのですね。

補足日時:2003/07/22 15:28
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QListView 項目の選択/選択解除について

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

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

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

 よろしくお願いします。

Aベストアンサー

失礼しました
× 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

失礼しました
× 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.A...続きを読む

QVBAでドラッグ・アンド・ドロップ

エクスプローラからファイルを選択して、ワードもしくはエクセルにD&Dしファイル名を取得したいと思います。

VBだとOleDragDropでいけるようですが、VBAにはこのイベントがありません。

ということは、無理ってことなのでしょう赤?

Aベストアンサー

こんにちは。

Excelしかやったことがありませんが、エクスプローラを開いて、ドラッグ&ドロップすれば、ふつう、そのままでいけるはずですが?

それにチェック機能をつけるのでしたら、Office では、ユーザーフォームの[ツール]メニューの、[その他のコントロール]で、Microsoft Listview Control (SP4) があるかと思います。そのListview Control に 以下のように、OleDragDrop イベントをつければよいと思います。

以下のコードでは、Explorer は、自分で閉じてください。

Excelの場合。
サンプルコード

'<UserFormモジュール以外>
Sub uformShow()
Dim myPath As String, myID As Double
myPath = ThisWorkbook.Path
myID = Shell("Explorer.exe /e, /root," & myPath, vbNormalFocus)
If myID = 0 Then Exit Sub
UserForm1.Show 0
End Sub

'<ユーザーフォームモジュール>
Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, _
                 Effect As Long, Button As Integer, _
                 Shift As Integer, x As Single, y As Single)

Dim i As Long
With Me
  AppActivate Me.Caption
  .ListView1.ListItems.Clear
  If Data.Files.Count < 1 Then Exit Sub
  For i = 1 To Data.Files.Count
   If InStrRev(Data.Files(i), "xls") > 0 Then
    Workbooks.Open (Data.Files(i))
   Else
    MsgBox "Excelの標準ファイルではありません。", vbCritical
   End If
  Next i
End With
End Sub

Private Sub UserForm_Activate()
  With Me.ListView1
    .OLEDragMode = 1
    .OLEDropMode = 1
    .View = 2
  End With
End Sub

こんにちは。

Excelしかやったことがありませんが、エクスプローラを開いて、ドラッグ&ドロップすれば、ふつう、そのままでいけるはずですが?

それにチェック機能をつけるのでしたら、Office では、ユーザーフォームの[ツール]メニューの、[その他のコントロール]で、Microsoft Listview Control (SP4) があるかと思います。そのListview Control に 以下のように、OleDragDrop イベントをつければよいと思います。

以下のコードでは、Explorer は、自分で閉じてください。

Excelの場合。
サンプル...続きを読む

QExcel VBA ファイル名をドラッグ&ドロップ

エクスプローラーなどからファイルをドラッグ&ドロップしたら
そのファイルに対して何かしらの処理を行う、ということがEXCEL
で可能でしょうか。
ドロップを受けるのはシートでもフォーム上のコントロールでも
どちらでも良いです。
イベントをいろいろ探したのですがよく分かりませんでした。
EXCELは2002を使用しています。
よろしくお願いいたします。

Aベストアンサー

こんにちは。

◆回答

VBA のコントロールはドラッグ&ドロップ操作をサポートしておりませんので、
基本的には代替案を探した方が良いでしょう。ただし、

  1. ListView などの OLE 系イベントのあるコントロールを使う
  2. API を使う

のいずれかの方法で実現できなくはありません。コモンコントロール(VB 等
に含まれる)の ListView コントロールなどが利用できる PC 環境ならば、
1. の方法、

http://oshiete1.goo.ne.jp/qa3523154.html

#3 Wendy02 さんのご回答が参考になります。

2. の方法は、非常に難易度が高くお勧めできませんが、もし調べるのでした
ら検索キーワードとしては、

  DragAcceptFiles
  DragQueryFile
  DragFinish

などの API です。

◆代替案

多少不便でも VBA の「ファイルを開く」ダイアログ

  Application.GetOpenFilename

の引数 MultiSelect を True で使うのが無難です。

Sub SampleProc()
  
  Dim vFileList As Variant
  Dim vFileName As Variant
  
  vFileList = Application.GetOpenFilename( _
        FileFilter:="全てのファイル(*.*),*.*", _
        MultiSelect:=True)
  If VarType(vFileList) = vbBoolean Then Exit Sub
  
  For Each vFileName In vFileList
    MsgBox vFileName
  Next

End Sub

こんにちは。

◆回答

VBA のコントロールはドラッグ&ドロップ操作をサポートしておりませんので、
基本的には代替案を探した方が良いでしょう。ただし、

  1. ListView などの OLE 系イベントのあるコントロールを使う
  2. API を使う

のいずれかの方法で実現できなくはありません。コモンコントロール(VB 等
に含まれる)の ListView コントロールなどが利用できる PC 環境ならば、
1. の方法、

http://oshiete1.goo.ne.jp/qa3523154.html

#3 Wendy02 さんのご回答が参考になりま...続きを読む

QListViewコントロールでサムネイル画像を一覧表示するには?

VB初心者です。
.NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました
今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。

作りたいのは以下のものです
○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか?
また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。
行き詰ったのは、第一段階の、サムネイル画像のしたのファイル名の所です。
よく分からずに
ListView1.Items.Add(bmpFiles(i), i)の所を
Dim bmpFileName As String = _
Path.GetFileNameWithoutExtension(bmpFiles(i))
ListView1.Items.Add(bmpFileName)
bmpFileName(ファイル名のみ)に変更したら、ファイル名は表示されるのですが、画像が表示されませんでした。

次に両方書いたのですが画像の下にフルパスその横にファイル名が表示されます。
Dim bmpFileName As String = _
Path.GetFileNameWithoutExtension(bmpFiles(i))
ListView1.Items.Add(bmpFiles(i), i)
ListView1.Items.Add(bmpFileName)
色々調べてみたのですが、思ったような記述が無かったのでここで質問させて頂きました。
拙い質問なので分かり難いかと思いますがアドバイスをよろしくお願いいたします。

VB初心者です。
.NET TIPSの中に「ListViewコントロールでサムネイル画像を一覧表示するには?」というものがありました
今回、それを利用してサムネイル一覧の表示をしようとして行き詰りました。

作りたいのは以下のものです
○決まったサイズの画像(bitmap)を表示し、その下にファイル名(フルパスでは無い)を表示し、更にその下に元の画像のサイズを表示するようなものを作成したいのですが、作成可能でしょうか?
また、作成可能な場合、どういった方法で作成したら良いか教えて下さい。
行き詰っ...続きを読む

Aベストアンサー

n-junです。

画像を表示して、そこにファイル名と画像の(幅と高さ)を表示でしょうか?

ListView1.Items.Add(System.IO.Path.GetFileName(jpgFiles(i)) & vbLf & "幅:" & original.Width _
& " 高さ:" & original.Height, i)

こんな感じなら出来ましたけど、どうでしょう?

QListViewで、非表示列って作れますか?

VB6.0です。

一覧にListViewを使用しているのですが、
非表示にしたい列があるのですが、出来ませんか?
列幅は可変としているので、列幅を0にしておく方法は使えません。

一覧には見せないけど、更新項目なので、
いちいちもう1度読み直すのは面倒なので、非表示で持っていたいのですが…。
何か方法ありますか?

Aベストアンサー

どんな感じで ListView にアイテムを追加してるのか分かりませんが、
見せたくない項目をキーにしてしまうとか? キーが重複しそうなら連番
でも仮につけとけば良いし。

With ListView1.ListItems.Add
  .Key = strKey & Chr(0) & Cstr(lngItemCnt)
  .Text = strText
  .SubItems(1) = strSub1Text
  .SubItems(2) = strSub2Text
  .SubItems(3) = strSub3Text
End With

このようにして、

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

  MsgBox Left$(Item.Key, InStr(Item.Key, Chr(0)) - 1)

End Sub

こんな感じで非表示にしたい項目を拾うのは?

> ただし、SORT機能をつけた場合、ずれますよね。

その通りですが、それが問題になりそうですか?

並びが気になるならソートしたときに非表示の ListView も同時に同項目で
ソートすれば良いだけだし、そもそも配列も非表示の ListView は並び変え
は必要ないと思いますよ。

表示されている ListView の ItemClick イベントなどで Key または Text
は拾えるので、あとはそれを配列や 非表示 ListView から探すだけでは?

表示されていないものに並びは関係ないと思いますが、いかかでしょう?

ただ、こっちの方法は効率悪いですね(´・ω・`)

どんな感じで ListView にアイテムを追加してるのか分かりませんが、
見せたくない項目をキーにしてしまうとか? キーが重複しそうなら連番
でも仮につけとけば良いし。

With ListView1.ListItems.Add
  .Key = strKey & Chr(0) & Cstr(lngItemCnt)
  .Text = strText
  .SubItems(1) = strSub1Text
  .SubItems(2) = strSub2Text
  .SubItems(3) = strSub3Text
End With

このようにして、

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

  MsgBox Left$(...続きを読む

QListViewの複数選択について

こんにちは。

VBAでListViewを使い、DBの情報を出力しているのですが、ListViewに出力すると、必ず、1行目が選択されています。その選択自体はいいのですが、選択されているところに色付けがされていないのです。他のところを選択すると色がちゃんと付きます。どうすれば、最初の選択行に色をつけることが出来るのか教えてください。

それから、ListViewで複数件選択された場合のIndexの取り方を教えてください。今は以下のようにして1件だけは取得できています。

s = Userform2.ListView1.SelectedItem.Index

初心者なので、なるべく詳しくお願いします。

Aベストアンサー

1.
HideSelectionプロパティをfalse
->好み、ソフトの性質にもよりますが...

または、DBの情報を表示し終ったときに下記コード
If Userform2.ListView1.Listitems.Count <> 0 Then
  Set Userform2.ListView1.SelectedItem = Userform2.ListView1.ListItems(1)
End If


2.
With Userform2.ListView1
  'リストビューの最後までループ
  For i = 1 To .ListItems.Count Step 1
    '選択されているか?
    If .ListItems(i).Selected = True Then
      '選択時の処理
      
    End If
  Next i
End With

アイデア次第...

QListViewから選択中の文字列を取得

VB2005の初心者です。
タイトル通り、ListViewから選択中の文字列によって処理を変えるプログラムを構築しようとしているのですが、うまくいきません。

ComboBoxの場合では
Private Sub button1_Click~
If ComboBox1.SelectedItem = "テスト" Then
処理
End if

でうまくいったのですが、ListViewの場合では
Private Sub button1_Click~
If ListView1.SelectedItems = "テスト" Then
処理
End if

と指定すると
「エラー1これらの引数で呼び出される、アクセス可能な '=' がないため、オーバーロードの解決に失敗しました」
とエラーがでます。


ListViewから選択中の文字列を取得するには「.SelectedItems」では取得できないのでしょうか?
VBに詳しい方ご教授お願いします。

Aベストアンサー

ComboBoxはSelectedItemと単数形ですよね
ListViewの場合SelectedItemsですから選択された複数の項目といったことになります

SelectedItemsはコレクションになるので 最初の選択項目なら
ListView1.SelectedItems(0)となりますので

if ListView1.SelectedItems(0).Text = "テスト" Then
といった具合に使います

もっとも選択アイテムない場合も考えられるので上記の前に
If ListView1.SelectedItems.Count = 0 then
  Exit Sub
End if
を追加したほうがいいかもしれません

QListViewで複数選択された項目を一度に削除する方法

ListViewで選択された複数のアイテムの値の取得方法と複数選択された項目を一度に削除する方法を教えてください。

Aベストアンサー

サンプルです。
一度に取得はムリなので、ループを使用します。

  Dim itmLvw As ListItem
  Dim i    As Long
  
  '選択されているアイテムの情報を調査
  For Each itmLvw In ListView1.ListItems
    If itmLvw.Selected Then
      Debug.Print itmLvw.Index & "番目が選択されています"
    End If
  Next itmLvw
  
  'リストの後ろの方から、選択されているアイテムを削除
  For i = ListView1.ListItems.Count To 1 Step -1
    Set itmLvw = ListView1.ListItems(i)
    If itmLvw.Selected Then
      ListView1.ListItems.Remove itmLvw.Index
    End If
  Next i

Qリストビューの項目の内容を変更する方法は?

お世話になります。

VS2005を使用しています。
VB.NETのリストビューで一覧を作ったのですが、その中の項目の内容をプログラム内から変更することは出来ないのでしょうか?
色々検索してみたのですが見つかりませんでした。

現在、リストビューには4つの項目があり、100行くらい有ります。
(1つ目の項目にはチェックボックス付き)
その中の、項目の内容を変更したいのです。

やはり、以下のようにしなければいけないのでしょうか。
1)一旦対象行の内容を保存
2)対象行を削除
3)保存先で内容変更
4)リストビューに再追加

よろしくご享受下さい。

Aベストアンサー

ListView1.Items(1).SubItems(2).Text = "ABC"
とかでは?

Qcheckbox付きListViewで デフォルトチェック

チェックボックス付きのListViewコントロールで初期値としてチェックボックスにチェック
をして表示したいと思っております。

Listviewにデータを追加して(subitemもあるため)その後
ListView1.Item(i).Selected = True
をしているのですが、チェックして表示されません。

項目が表示された後、何れかの項目をチェックしようとするとチェックが表示されます。

どのようにすれば最初から表示されるのでしょうか?

初歩的な質問かもしれませんが、お願い致します。

Aベストアンサー

Selectedではなく CheckedプロパティをTrueに設定しましょう

ListView1.Item(i).Checked = True
といった具合です


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

人気Q&Aランキング