玄関へお回り下さい。
リストボックスでよく使用する設定集(その2)(9個)             (SNo.101)

1.指定行を削除する
2.選択されている項目を削除する
3.すべての項目を選択状態にする
4.すべての項目の選択状態を解除する
5.選択されている項目数を取得する
6.処理中の再描画を抑制する(項目を高速に書き込む)
7.クリック毎に昇順・降順に並べ替える
8.複数選択されている項目を高速に削除する
使用コントロール Button1 〜 Button8  ListBox1
その他条件 WindowsXP(Vista) Visual Basic 2005(VB2008)
 
1.指定行を削除する
 
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
'指定の行を削除する(4行目を削除します)
    ListBox1.Items.RemoveAt(3)
End Sub
 
2.選択されている項目を削除する
 
Private Sub Button2_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button2.Click
'選択されている項目を削除する
    ListBox1.Items.Remove(ListBox1.SelectedItem)
End Sub

3.すべての項目を選択状態にする
 
Private Sub Button3_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button3.Click
'すべての項目を選択状態に設定(データ件数が少ない場合はこちらが簡単)
    Dim i As Integer
    For i = 0 To ListBox1.Items.Count - 1
        ListBox1.SetSelected(i, True)
    Next
   '項目が多くて時間がかかるようならWin32 API の使用を検討して下さい。
End Sub

4.すべての項目の選択状態を解除する
 
Private Sub Button4_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button4.Click
'すべての選択状態を解除する
    ListBox1.ClearSelected()
End Sub
 
5.選択されている項目数を取得する
 
Private Sub Button5_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button5.Click
'選択されている項目数を取得する
    Debug.WriteLine(ListBox1.SelectedItems.Count)
End Sub
 
6.処理中の再描画を抑制する(項目を高速に書き込む)
 
Private Sub Button6_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button6.Click
'処理中コントロールの再描画を抑制
    Dim sTime As DateTime
    Dim eTime As DateTime
'------------------------------------------------------------------
    ListBox1.Items.Clear()
    sTime = Now
    For i As Integer = 0 To 1000
        ListBox1.Items.Add(CStr(i).PadLeft(4, " ") & " 番目のデータです")
    Next i
    eTime = Now
    MessageBox.Show(eTime.Subtract(sTime).TotalSeconds & " 秒かかりました。")
    '結果  パフォーマンスの公表は規約違反のようだから、各自測定して下さい 秒
'------------------------------------------------------------------------------

    ListBox1.Items.Clear()
    sTime = Now
    ListBox1.BeginUpdate()  'コントロールを再描画しないようにする。
    For i As Integer = 0 To 1000
        ListBox1.Items.Add(CStr(i).PadLeft(4, " ") & " 番目のデータです")
    Next i
    ListBox1.EndUpdate()    'コントロールの描画を再開する。
    eTime = Now
    MessageBox.Show(eTime.Subtract(sTime).TotalSeconds & " 秒かかりました。")
    '結果  びっくりするほど早い 秒
'------------------------------------------------------------------------------

    ListBox1.Items.Clear()
    sTime = Now
    ListBox1.Visible = False    '一旦非表示(VB6.0 の時のように)
    For i As Integer = 0 To 1000
        ListBox1.Items.Add(CStr(i).PadLeft(4, " ") & " 番目のデータです")
    Next i
    ListBox1.Visible = True     '表示
    eTime = Now
    MessageBox.Show(eTime.Subtract(sTime).TotalSeconds & " 秒かかりました。")
    '結果  あまり変らない 秒
'------------------------------------------------------------------------------
End Sub
 
7.クリック毎に昇順・降順に並べ替える (2)

Private
 Sub Button7_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button7.Click
'クリック毎に昇順・降順に並べ替える   
    ArrayList.Adapter(ListBox1.Items).Reverse()
    ListBox1.Sorted = True
End Sub
 
通常は昇順にしかソートされないのだが、データを配列に入れ、要素の順序を反転する事で
降順のソートを実現している。
他の事を試している時に、偶然発見したもので、このような使い方が許されるのかは定かでない。
件数が多いと処理速度が落ちるのでどうかと思うが、1000件程度なら問題がないようです。
8.複数選択されている項目を高速に削除する
 
Private Sub Button8_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button8.Click
'複数選択されている項目を削除(総当りしないので高速に処理できます)
    For i As Integer = ListBox1.SelectedIndices.Count - 1 To 0 Step -1
        ListBox1.Items.RemoveAt(ListBox1.SelectedIndices(i))
    Next
End Sub

テスト用データの表示

Private
 Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
    With ListBox1
        .Items.Add("わをん")
        .Items.Add("かきくけこ")
        .Items.Add("さしすせそ")
        .Items.Add("たちつてと")
        .Items.Add("なにぬねの")
        .Items.Add("はひふへほ")
        .Items.Add("まみむめも")
        .Items.Add("や  ゆ  よ")
        .Items.Add("らりるれろ")
        .Items.Add("あいうえお")
   End With
End Sub






2004/05/08
2005/10/18


VBレスキュー(花ちゃん)
VB.NET2003  VB2005