質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

3528閲覧

VB.NET ListViewで並び替えした後でも選択したアイテムを移動させたい

sin777

総合スコア20

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/02/11 13:41

ソートする前の状態では、上下ボタンで選択したアイテムを移動させる事が
出来ていましたが、ソート後では上下ボタンでアイテムが移動出来なくなりました。
ソート後でも、選択したアイテムを移動させたいのですが、原因が分かりません。
どなたか教えて頂きたいと思います。宜しくお願い致します。
※FromにListViewとButtonを2つ配置しています。

VB

1Imports System.Text 2Imports Microsoft.VisualBasic.FileIO 3Public Class Form1 4 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 5 With ListView1 6 .GridLines = True 7 .View = View.Details 8 .FullRowSelect = True 9 .MultiSelect = False 10 .Columns.Add("  I D", 70, HorizontalAlignment.Center) 11 .Columns.Add("会 社 名", 200, HorizontalAlignment.Center) 12 .Columns.Add("名 前", 130, HorizontalAlignment.Center) 13 End With 14 Using parser As New TextFieldParser("C:\Users\ユーザー名\テスト.csv", Encoding.UTF8) 15 parser.TextFieldType = FieldType.Delimited 16 parser.HasFieldsEnclosedInQuotes = True 17 parser.SetDelimiters(",") 18 ListView1.Items.Clear() 19 While Not parser.EndOfData 20 Dim fields As String() = parser.ReadFields() 21 ListView1.Items.Add(New ListViewItem(fields)) 22 End While 23 End Using 24 End Sub 25 26 ' 「↑」ボタン 27 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 28 'アイテムが選択されていない場合抜ける 29 If ListView1.SelectedItems.Count = 0 Then 30 Return 31 End If 32 '先頭のアイテムが選択されている場合抜ける 33 If ListView1.SelectedItems(0).Index = 0 Then 34 Return 35 End If 36 '挿入先のインデックス 37 Dim insertPosition As Integer = ListView1.SelectedItems(0).Index - 1 38 '選択されたアイテム 39 Dim itm As ListViewItem = ListView1.SelectedItems(0) 40 '選択されたアイテムを削除する 41 ListView1.Items.Remove(itm) 42 'アイテムを挿入する 43 ListView1.Items.Insert(insertPosition, itm) 44 ListView1.Select() 45 ListView1.EnsureVisible(insertPosition) 46 End Sub 47 48 ' 「↓」ボタン 49 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 50 'アイテムが選択されていない場合抜ける 51 If ListView1.SelectedItems.Count = 0 Then 52 Return 53 End If 54 '最後のアイテムが選択されている場合抜ける 55 If ListView1.SelectedItems(0).Index = ListView1.Items.Count - 1 Then 56 Return 57 End If 58 '挿入先のインデックス 59 Dim insertPosition As Integer = ListView1.SelectedItems(0).Index + 1 60 '選択されたアイテム 61 Dim itm As ListViewItem = ListView1.SelectedItems(0) 62 '選択されたアイテムを削除する 63 ListView1.Items.Remove(itm) 64 'アイテムを挿入する 65 ListView1.Items.Insert(insertPosition, itm) 66 ListView1.Select() 67 ListView1.EnsureVisible(insertPosition) 68 End Sub 69 70 'フォームのカラムクリックイベント 71 Private Sub ListView1_ColumnClick(ByVal sender As Object, 72 ByVal e As System.Windows.Forms.ColumnClickEventArgs) _ 73 Handles ListView1.ColumnClick 74 Static no(2) As Integer '列のソート状態保持用 75 If no(e.Column) = 0 Then 76 '初回または昇順 77 Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 0) 78 no(e.Column) = 1 '次回は降順 79 Else 80 '降順 81 Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 1) 82 no(e.Column) = 0 '次回は昇順 83 End If 84 End Sub 85 86 'ListViewItemComparerクラスをフォームコードに追加 87 Class ListViewItemComparer 88 Implements IComparer 89 90 Private col As Integer 91 Private sort As Integer 92 93 Public Sub New() 94 col = 0 95 sort = 0 96 End Sub 97 98 Public Sub New(ByVal column As Integer, ByVal sortflg As Integer) 99 'column : 列番号 100 'sortflg : ソート(0=昇順,1=降順) 101 '-------------------------------- 102 col = column 103 sort = sortflg 104 End Sub 105 106 Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _ 107 Implements IComparer.Compare 108 If sort = 0 Then 109 '昇順 110 Return [String].Compare(CType(x, ListViewItem).SubItems(col).Text, 111 CType(y, ListViewItem).SubItems(col).Text) 112 Else 113 '降順 114 Return -[String].Compare(CType(x, ListViewItem).SubItems(col).Text, 115 CType(y, ListViewItem).SubItems(col).Text) 116 End If 117 End Function 118 End Class 119End Class

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sin777

2021/02/12 14:21

遅くなりましたが、回答有難う御座いました。 フォームのカラムクリックイベントの Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 0)の後と、 Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 1)の後に 「ListView1.ListViewItemSorter = Nothing」の一行を入れる事で 解決しました。 有難う御座いました。
guest

回答1

0

自己解決

フォームのカラムクリックイベントの
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 0)の後と、
Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, 1)の後に
「ListView1.ListViewItemSorter = Nothing」の一行を入れる事で解決しました。

投稿2021/02/12 14:32

sin777

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問