×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Windowsタッチ操作でグリッドをスクロールしたときに最後が隠れる
ネットでググると
https://blogs.msdn.microsoft.com/jpvsblog/2014/08/18/datagridview/
にありました。
-------------------------------------------------------------------------------------------------------
この現象は、DataGridView コントロールにおける不具合によって必要なメッセージが送信されないため、表示領域とコントロールの座標との整合性が取れなくなり発生します。タッチ操作に起因するので、マウスによるスクロールでは発生しません。
----------------------------------------------------------------------------------
例によってバグですが修正するのかしないのか?
重要なバグだと思うんだけど、
回避方法は上記に乗っているがC#の例なのでVBに書き換え
http://converter.telerik.com/のコードコンバータで書き換え
エラーが残る、
http://www.projectgroup.info/tips/Microsoft.NET/comm_0026.html
を参考に書き換え、、
Private Const WM_VSCROLL As Integer = &H115
Private Const SB_THUMBPOSITION As Integer = &H4
Private Const SB_THUMBTRACK As Integer = &H5
<System.Runtime.InteropServices.DllImport("user32")>
Private Shared Function PostMessage(hWnd As IntPtr, Msg As Integer, wParam As IntPtr, lParam As IntPtr) As Integer
End Function
ネットでググると
https://blogs.msdn.microsoft.com/jpvsblog/2014/08/18/datagridview/
にありました。
-------------------------------------------------------------------------------------------------------
この現象は、DataGridView コントロールにおける不具合によって必要なメッセージが送信されないため、表示領域とコントロールの座標との整合性が取れなくなり発生します。タッチ操作に起因するので、マウスによるスクロールでは発生しません。
----------------------------------------------------------------------------------
例によってバグですが修正するのかしないのか?
重要なバグだと思うんだけど、
回避方法は上記に乗っているがC#の例なのでVBに書き換え
http://converter.telerik.com/のコードコンバータで書き換え
エラーが残る、
http://www.projectgroup.info/tips/Microsoft.NET/comm_0026.html
を参考に書き換え、、
Private Const WM_VSCROLL As Integer = &H115
Private Const SB_THUMBPOSITION As Integer = &H4
Private Const SB_THUMBTRACK As Integer = &H5
<System.Runtime.InteropServices.DllImport("user32")>
Private Shared Function PostMessage(hWnd As IntPtr, Msg As Integer, wParam As IntPtr, lParam As IntPtr) As Integer
End Function
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
If m.Msg = WM_VSCROLL Then
If Me.LoWord(CLng(m.WParam)) = Me.LoWord(CLng(SB_THUMBPOSITION)) Then
MyBase.BeginInvoke(New Action(Of IntPtr, IntPtr)(Sub(WParam As IntPtr, LParam As IntPtr)
Dim testWParam As IntPtr = New IntPtr(5)
PostMessage(MyBase.Handle, 277, testWParam, LParam)
End Sub), New Object() {m.WParam, m.LParam})
End If
End If
End Sub
MyBase.WndProc(m)
If m.Msg = WM_VSCROLL Then
If Me.LoWord(CLng(m.WParam)) = Me.LoWord(CLng(SB_THUMBPOSITION)) Then
MyBase.BeginInvoke(New Action(Of IntPtr, IntPtr)(Sub(WParam As IntPtr, LParam As IntPtr)
Dim testWParam As IntPtr = New IntPtr(5)
PostMessage(MyBase.Handle, 277, testWParam, LParam)
End Sub), New Object() {m.WParam, m.LParam})
End If
End If
End Sub
Protected Function LoWord(input As Long) As Short
Return CShort((CInt(input) And 65535))
End Function
まだ最終行が一部半行程度で残ることがあるが、これで一応良しとするしか
ないような、、、
Return CShort((CInt(input) And 65535))
End Function
まだ最終行が一部半行程度で残ることがあるが、これで一応良しとするしか
ないような、、、
PR