VB2005 ListVeiwの列巾を固定したい


はや  2007-05-17 19:02:03  No: 136409

よろしくお願いいたします。

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の列巾の固定が出来ればかまいません。

以上よろしくお願いいたします。


Hongliang  URL  2007-05-17 20:04:01  No: 136410

> エラーは  lp.code.CompareTo(HDN_BEGINTRACK)  の時に
> HDN_BEGINTRACK はINT32型でないとだめとなります。
> 単純のUint32からInt32に変えても値が大きすぎるのでエラーになります。

どこまでがエラーでどこからが質問者さんの記述なのかが曖昧で分かりづらいので、エラーメッセージは要約したりせずそのまま書き写して(コピーできるならコピー&ペーストで)ください。
NMHDR の定義が怪しいところですが。

ま、ColumnWidthChanging イベントで十分でしょう。


はや  2007-05-17 20:16:18  No: 136411

Hongliangさん早速の返答ありがとうございます。

エラーメッセージの件申し訳ございません。

実際には「オブジェクトは Int32 型でなければなりません。」
と表示されます。
場所は
If ((lp.code.CompareTo(HDN_BEGINTRACK) = 0) Or _
    (lp.code.CompareTo(HDN_BEGINTRACKW) = 0)) Then
        m.Result = IntPtr.op_Explicit(1)
の所です。

ColumnWidthChanging イベント
今から調べてみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加