OSDN Git Service

ListView横スクロール時にアイコンが再描画されない不具合を修正
authoranis774 <anis774@users.sourceforge.jp>
Tue, 7 Sep 2010 08:40:15 +0000 (08:40 +0000)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sat, 18 Feb 2012 14:15:14 +0000 (23:15 +0900)
git-svn-id: http://svn.sourceforge.jp/svnroot/tween/trunk@816 e39ad16e-3079-482e-bb30-4b4d378143b6

Tween/DetailsListView.vb
Tween/Tween.vb

index 8ec7884..03a2569 100644 (file)
@@ -36,21 +36,7 @@ Namespace TweenCustomControl
         Private multiSelected As Boolean
         Private _handlers As New System.ComponentModel.EventHandlerList()
 
-        Custom Event Scrolled As System.EventHandler
-            AddHandler(ByVal value As System.EventHandler)
-                Me._handlers.AddHandler("Scrolled", value)
-            End AddHandler
-
-            RemoveHandler(ByVal value As System.EventHandler)
-                Me._handlers.RemoveHandler("Scrolled", value)
-            End RemoveHandler
-
-            RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
-                Dim value As System.Delegate = Me._handlers("Scrolled")
-                Dim handler As System.EventHandler = DirectCast(value, System.EventHandler)
-                handler.Invoke(Me, e)
-            End RaiseEvent
-        End Event
+        Public Event Scrolled As System.EventHandler
 
         Public Sub New()
             View = Windows.Forms.View.Details
@@ -177,19 +163,24 @@ Namespace TweenCustomControl
         Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
             Const WM_ERASEBKGND As Integer = &H14
             Const WM_PAINT As Integer = &HF
+            Const WM_HSCROLL As Integer = &H114
+            Const WM_VSCROLL As Integer = &H115
+
+            Select Case m.Msg
+                Case WM_ERASEBKGND
+                    If Me.changeBounds <> Rectangle.Empty Then
+                        m.Msg = 0
+                    End If
+                Case WM_PAINT
+                    If Me.changeBounds <> Rectangle.Empty Then
+                        Win32Api.ValidateRect(Me.Handle, IntPtr.Zero)
+                        Me.Invalidate(Me.changeBounds)
+                        Me.changeBounds = Rectangle.Empty
+                    End If
+                Case WM_HSCROLL, WM_VSCROLL
+                    RaiseEvent Scrolled(Me, EventArgs.Empty)
+            End Select
 
-            If m.Msg = WM_ERASEBKGND Then
-                If Me.changeBounds <> Rectangle.Empty Then
-                    m.Msg = 0
-                End If
-            End If
-            If m.Msg = WM_PAINT Then
-                If Me.changeBounds <> Rectangle.Empty Then
-                    Win32Api.ValidateRect(Me.Handle, IntPtr.Zero)
-                    Me.Invalidate(Me.changeBounds)
-                    Me.changeBounds = Rectangle.Empty
-                End If
-            End If
             Try
                 MyBase.WndProc(m)
             Catch ex As ArgumentOutOfRangeException
index 00a6464..1387cf3 100644 (file)
@@ -3189,6 +3189,7 @@ Public Class TweenMain
         AddHandler _listCustom.CacheVirtualItems, AddressOf MyList_CacheVirtualItems
         AddHandler _listCustom.RetrieveVirtualItem, AddressOf MyList_RetrieveVirtualItem
         AddHandler _listCustom.DrawSubItem, AddressOf MyList_DrawSubItem
+        AddHandler _listCustom.Scrolled, AddressOf MyList_Scrolled
 
         InitColumnText()
         _colHd1.Text = ColumnText(0)
@@ -3351,6 +3352,7 @@ Public Class TweenMain
         RemoveHandler _listCustom.CacheVirtualItems, AddressOf MyList_CacheVirtualItems
         RemoveHandler _listCustom.RetrieveVirtualItem, AddressOf MyList_RetrieveVirtualItem
         RemoveHandler _listCustom.DrawSubItem, AddressOf MyList_DrawSubItem
+        RemoveHandler _listCustom.Scrolled, AddressOf MyList_Scrolled
 
         TabDialog.RemoveTab(TabName)
 
@@ -7040,6 +7042,11 @@ RETRY:
         'End If
     End Sub
 
+    Private Sub MyList_Scrolled(ByVal sender As Object, ByVal e As EventArgs)
+        Dim listView As DetailsListView = DirectCast(sender, DetailsListView)
+        listView.Refresh()
+    End Sub
+
     Public Function WebBrowser_GetSelectionText(ByRef ComponentInstance As WebBrowser) As String
         '発言詳細で「選択文字列をコピー」を行う
         'WebBrowserコンポーネントのインスタンスを渡す