Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Listview SelectedIndexChanging eventti

sniiki [02.10.2008 21:06:05]

#

Miten kyseisen eventin saa toteutettua VS2008:ssa? Eli tapahtuma joka potkaistaan käyntiin juuri ennenkuin valinta listassa vaihtuu.
Seuraava pätkä pelaa ok VS 2003:ssa, mutta 2008:aan kääntäessä eventti ei vaan suostu käynnistymään? (käännöksessä ei tapahdu muutoksia)

Tämä siis lisää .SelectedIndexChanging -eventin listviewiin.

Public Class ItemChangingEventArgs
    Inherits CancelEventArgs
    Public Sub New(ByVal index As Integer)
        m_index = index
    End Sub
    Public ReadOnly Property Index() As Integer
        Get
            Return m_index
        End Get
    End Property
    Private m_index As Integer
End Class

Public Class ListViewEx
    Inherits ListView
    Public Sub New()
        Me.SetStyle(ControlStyles.ResizeRedraw, True)
        Me.SetStyle(ControlStyles.DoubleBuffer, True)
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
    End Sub
    Public Const WM_USER As Integer = &H400
    Public Const WM_NOTIFY As Integer = &H4E
    Public Const OCM__BASE As Integer = WM_USER + &H1C00
    Public Const OCM_NOTIFY As Integer = OCM__BASE + WM_NOTIFY
    Public Const LVN_FIRST As Integer = 0 - 100
    Public Const LVN_ITEMCHANGING As Integer = LVN_FIRST - 0  ' <--- onko tämä vaihtunut?
    Public Const LVIF_STATE As Integer = &H8
    Public Const LVIS_SELECTED As Integer = &H2
    <StructLayout(LayoutKind.Sequential)> Public Structure NMHDR
        Public hwndFrom As IntPtr
        Public idFrom As Integer
        Public code As Integer
    End Structure
    <StructLayout(LayoutKind.Sequential)> Public Structure POINT
        Public x As Integer
        Public y As Integer
    End Structure
    <StructLayout(LayoutKind.Sequential)> Public Structure NMLISTVIEW
        Public hdr As NMHDR
        Public iItem As Integer
        Public iSubItem As Integer
        Public uNewState As Integer
        Public uOldState As Integer
        Public uChanged As Integer
        Public ptAction As POINT
        Public lParam As Integer
    End Structure

    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

        If m.Msg = OCM_NOTIFY Then
            Dim nm As NMHDR = CType(m.GetLParam(GetType(NMHDR)), NMHDR)
            If nm.code = LVN_ITEMCHANGING Then
                Dim nmlv As NMLISTVIEW = CType(m.GetLParam(GetType(NMLISTVIEW)), NMLISTVIEW)
                If nmlv.uChanged And LVIF_STATE Then
                    If nmlv.uNewState And LVIS_SELECTED Then
                        Dim e As New ItemChangingEventArgs(nmlv.iItem)
                        OnSelectedIndexChanging(e)
                        If e.Cancel Then
                            m.Result = New IntPtr(1)
                            Exit Sub
                        End If
                    End If
                End If
            End If
        End If
        MyBase.WndProc(m)
    End Sub

    Public Delegate Sub SelectedIndexChangingEventHandler(ByVal sender As Object, ByVal e As ItemChangingEventArgs)
    Public Event SelectedIndexChanging As SelectedIndexChangingEventHandler

    Protected Overridable Sub OnSelectedIndexChanging(ByVal e As ItemChangingEventArgs)
        RaiseEvent SelectedIndexChanging(Me, e)
    End Sub
End Class

neau33 [07.10.2008 01:02:27]

#

Moikka sniiki!

tässä vähän yksinkertaisempi toteutustapa...

Sub ListView1_ItemSelectionChanged(sender As Object, _
e As ListViewItemSelectionChangedEventArgs)
   MessageBox.Show("Tuut")
End Sub

Sub ListView1_SelectedIndexChanged( _
sender As Object, e As EventArgs)
   MessageBox.Show("Tööt")
End Sub

sniiki [07.10.2008 16:55:36]

#

Muuten hyvä mutta tuo on vähä semmonen "myöhästä pinnistää ku *askat on jo housuis".
Eli toi eventti käynnistyy vasta kun valinta on jo tehty.

Syy miksi pitäis saada valinta estettyä on semmoinen, että ohjailen listan scrollausta "ulkoisella käskyllä" siten, että listaa pystyy vetää hiirellä nappi pohjassa ylös/alas. Listan sisäisessä toiminnassa tapahtuu kuitenkin jotain kummia scrollauksen suhteen kun valittu itemi muuttuu ja lista nytkähtää ikävästi takaisinpäin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta