×
[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
・Windows10アニバサリーアップデートですが散々悪さをしている。
特にwin7やwin8.1からの強制アップグレード版に集中
WIN10の時もすごかったけど、アニバサリーでも酷い
・一例
officeで共有ファイルが読めない。(再インストールで解決)
他のアプリが起動の都度、インストールディスクを求めてくる
SQLServerの構成マネージャが隠れる
SQLserverの自動起動しない
共有ファイルに接続パスワードを求められる、または接続すらできない
・その都度弊社ユーザサポートに電話の山
MS社のWin10開発の皆さん、一度弊社のサポート対応電話に出て頂きたい
その醜さがわかるでしょうね
・弊社は仕事だからまだしもお客様が自分の操作ミスかと戦々恐々で気の毒になる。
「決してお客様の操作が原因でなく、マイクロソフト社の問題です。
ご安心下さい。」から始まって遠隔サポートを実施するが
遠隔で解決出来ない問題も多々あり、根本治療でなく対処療法での
対応になっている
・SQLserverの自動起動しないは解決方法がないので、
REM SQLserverのスタート のテスト版
特にwin7やwin8.1からの強制アップグレード版に集中
WIN10の時もすごかったけど、アニバサリーでも酷い
・一例
officeで共有ファイルが読めない。(再インストールで解決)
他のアプリが起動の都度、インストールディスクを求めてくる
SQLServerの構成マネージャが隠れる
SQLserverの自動起動しない
共有ファイルに接続パスワードを求められる、または接続すらできない
・その都度弊社ユーザサポートに電話の山
MS社のWin10開発の皆さん、一度弊社のサポート対応電話に出て頂きたい
その醜さがわかるでしょうね
・弊社は仕事だからまだしもお客様が自分の操作ミスかと戦々恐々で気の毒になる。
「決してお客様の操作が原因でなく、マイクロソフト社の問題です。
ご安心下さい。」から始まって遠隔サポートを実施するが
遠隔で解決出来ない問題も多々あり、根本治療でなく対処療法での
対応になっている
・SQLserverの自動起動しないは解決方法がないので、
REM SQLserverのスタート のテスト版
SC query MSSQL$SQLEXPRESS | findstr STATE | findstr RUNNING > null
if "%errorlevel%" == "0" (
echo "SQL2008R2起動済みです"
) else (
NET START MSSQL$SQLEXPRESS
)
SC query SQLBrowser | findstr STATE | findstr RUNNING > null
if "%errorlevel%" == "0" (
echo "SQLBrowse起動済みです"
) else (
NET START SQLBrowser
)
TIMEOUT /T 5
EXIT
等のバッチファイルで対応している
幾ら無償のExpressとはいえ、酷すぎる。
有償版はwin10ではないので、安心だが、
win10ベースのWindowsserverが不安、、、、
if "%errorlevel%" == "0" (
echo "SQL2008R2起動済みです"
) else (
NET START MSSQL$SQLEXPRESS
)
SC query SQLBrowser | findstr STATE | findstr RUNNING > null
if "%errorlevel%" == "0" (
echo "SQLBrowse起動済みです"
) else (
NET START SQLBrowser
)
TIMEOUT /T 5
EXIT
等のバッチファイルで対応している
幾ら無償のExpressとはいえ、酷すぎる。
有償版はwin10ではないので、安心だが、
win10ベースのWindowsserverが不安、、、、