よろしくお願いいたします。
Vb2003で機能していたコードをそのままVb2005に移したらエラーが発生し動かなくなってしまいました。
ソースの一部を記入いたします
Private HDN_BEGINTRACK As UInt32 = Convert.ToUInt32(4294966990)
Private HDN_BEGINTRACKW As UInt32 = Convert.ToUInt32(4294966970)
'this::WndProc
Protected Overrides Sub WndProc(ByRef m As Message)
Dim lp As NMHDR
Select Case m.Msg
Case WM_NOTIFY
If FixHeaderColumnWidth = True Then ' ヘッダー列幅固定
lp = Marshal.PtrToStructure(m.LParam, lp.GetType())
If ((lp.code.CompareTo(HDN_BEGINTRACK) = 0) Or _
(lp.code.CompareTo(HDN_BEGINTRACKW) = 0)) Then
m.Result = IntPtr.op_Explicit(1)
Exit Sub
End If
End If
End Select
エラーは lp.code.CompareTo(HDN_BEGINTRACK) の時に
HDN_BEGINTRACK はINT32型でないとだめとなります。
単純のUint32からInt32に変えても値が大きすぎるのでエラーになります。
この方法以外でもListViewの列巾の固定が出来ればかまいません。
以上よろしくお願いいたします。
> エラーは lp.code.CompareTo(HDN_BEGINTRACK) の時に
> HDN_BEGINTRACK はINT32型でないとだめとなります。
> 単純のUint32からInt32に変えても値が大きすぎるのでエラーになります。
どこまでがエラーでどこからが質問者さんの記述なのかが曖昧で分かりづらいので、エラーメッセージは要約したりせずそのまま書き写して(コピーできるならコピー&ペーストで)ください。
NMHDR の定義が怪しいところですが。
ま、ColumnWidthChanging イベントで十分でしょう。
Hongliangさん早速の返答ありがとうございます。
エラーメッセージの件申し訳ございません。
実際には「オブジェクトは Int32 型でなければなりません。」
と表示されます。
場所は
If ((lp.code.CompareTo(HDN_BEGINTRACK) = 0) Or _
(lp.code.CompareTo(HDN_BEGINTRACKW) = 0)) Then
m.Result = IntPtr.op_Explicit(1)
の所です。
ColumnWidthChanging イベント
今から調べてみます。
ツイート | ![]() |