C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ListBoxにて常時選択状態のアイテムを作成したい

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■103761 / inTopicNo.1)  ListBoxにて常時選択状態のアイテムを作成したい
  
□投稿者/ まりもん (3回)-(2025/07/09(Wed) 12:38:20)

分類:[.NET 全般] 

.NET Framework4.8にてListBoxを使用してアイテムを複数選択できるよう設定し、そのアイテムの中で常時選択状態とし選択解除できないアイテムを作成しようとしています。


Public Class ListBoxEX
    Inherits ListBox

    Private _FixList As List(Of Integer)
    Public Property FixList As List(Of Integer)
        Get
            Return _FixList
        End Get
        Set(value As List(Of Integer))

            If value IsNot Nothing Then
                _FixList = value

                Try
                    Me.SelectedIndices.Clear()
                    For Each i In _FixList
                        Me.SelectedIndices.Add(i)
                    Next
                Catch ex As Exception
                    Throw New ArgumentOutOfRangeException("強制選択項目がありません", ex)
                End Try
            End If

        End Set
    End Property

    Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
        Dim index As Integer = Me.IndexFromPoint(e.Location)
        If index >= 0 Then
            If FixList.Contains(index) Then
                '選択解除できない項目
                If Me.SelectedIndices.Contains(index) = False Then
                    Me.SelectedIndices.Add(index)
                End If
                Return
            Else
            End If
        End If
        MyBase.OnMouseDown(e)
    End Sub

End Class

といった形でMouseDownされた時にその項目が選択解除できないアイテムであった時に選択が解除されていれば再度選択するといった動作にしています。
(コードにて選択解除されるといったことはOKとします)

この時、マウスボタンをダウンしたとき一瞬選択が解除された状態が表示されることがあります。
というかOnMouseDownに入ってきたときには選択が解除されています。

この一瞬解除される描画を止めるというかOnMouseDownに入ってくる前の選択解除を止めることはできるのでしょうか?

引用返信 編集キー/
■103762 / inTopicNo.2)  Re[1]: ListBoxにて常時選択状態のアイテムを作成したい
□投稿者/ まりもん (4回)-(2025/07/09(Wed) 13:19:16)
OwnerDrawFixedとしてOnDrawItemにて常に選択状態として描画することでマウスクリック時のちらつきをなくしました。

仕様上オーナードローとして固定選択項目は色を変更する必要が出てきたのでこれで解決とします。
表示上選択されているよう表現できればいいだけだったので項目を選択状態にする必要すらありませんでした。
質問する必要すらありませんでした。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ