elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Como detectar cambios en un listbox en tiempo de ejecución
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como detectar cambios en un listbox en tiempo de ejecución  (Leído 2,530 veces)
rapbyone

Desconectado Desconectado

Mensajes: 173


Ver Perfil
Como detectar cambios en un listbox en tiempo de ejecución
« en: 19 Agosto 2016, 21:16 pm »

Estimados, tengo el siguiente problema, necesito detectar cambios en un listbox en tiempo de ejecución, no solamente la cantidad de items, sino que también la edición de alguno de ellos, así como lo hace el evento change en un textbox. Se puede?

Atento a sus comentarios
gracias amigos


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: Como detectar cambios en un listbox en tiempo de ejecución
« Respuesta #1 en: 20 Agosto 2016, 04:55 am »

Ups, te escribí el comentario de aquí abajo pensando que estaba en el foro de VB.NET... qué confusión más tonta y qué pérdida de tiempo hacer ese código suponiendo que no te pueda servir de nada, pero bueno, de todas formas ahí dejo el código, por que en esencia la información proporcionada te servría igualmente para adaptarlo a VB6, me refiero a la solución basada en los mensajes de ventana, y lo cierto es que no has aclarado si trabajas en VB6 o VB.NET y en este subforo de VB nunca se sabe si andan preguntando de VB.NET o de VB6...

Saludos!












Se puede?

Si, se puede, simplemente debes controlar los mensajes de ventana para ese ListBox.

En particular, para determinar si el texto o datos de un item han sido modificados, debes controlar el mensaje LB_INSERTSTRING o LB_SETITEMDATA respectivamente del tipo de item.

Para determinar cambios en la cantidad de items, debes controlar los mensajes LB_ADDSTRING y LB_DELETESTRING.

Los valores de los mensajes los puedes encontrar en el archivo "WinUser.h" de la SDK de Windows:
Citar
/*
 * Listbox messages
 */
#define LB_ADDSTRING            0x0180
#define LB_INSERTSTRING         0x0181
#define LB_DELETESTRING         0x0182
#define LB_SELITEMRANGEEX       0x0183
#define LB_RESETCONTENT         0x0184
#define LB_SETSEL               0x0185
#define LB_SETCURSEL            0x0186
#define LB_GETSEL               0x0187
#define LB_GETCURSEL            0x0188
#define LB_GETTEXT              0x0189
#define LB_GETTEXTLEN           0x018A
#define LB_GETCOUNT             0x018B
#define LB_SELECTSTRING         0x018C
#define LB_DIR                  0x018D
#define LB_GETTOPINDEX          0x018E
#define LB_FINDSTRING           0x018F
#define LB_GETSELCOUNT          0x0190
#define LB_GETSELITEMS          0x0191
#define LB_SETTABSTOPS          0x0192
#define LB_GETHORIZONTALEXTENT  0x0193
#define LB_SETHORIZONTALEXTENT  0x0194
#define LB_SETCOLUMNWIDTH       0x0195
#define LB_ADDFILE              0x0196
#define LB_SETTOPINDEX          0x0197
#define LB_GETITEMRECT          0x0198
#define LB_GETITEMDATA          0x0199
#define LB_SETITEMDATA          0x019A
#define LB_SELITEMRANGE         0x019B
#define LB_SETANCHORINDEX       0x019C
#define LB_GETANCHORINDEX       0x019D
#define LB_SETCARETINDEX        0x019E
#define LB_GETCARETINDEX        0x019F
#define LB_SETITEMHEIGHT        0x01A0
#define LB_GETITEMHEIGHT        0x01A1
#define LB_FINDSTRINGEXACT      0x01A2
#define LB_SETLOCALE            0x01A5
#define LB_GETLOCALE            0x01A6
#define LB_SETCOUNT             0x01A7
#if(WINVER >= 0x0400)
#define LB_INITSTORAGE          0x01A8
#define LB_ITEMFROMPOINT        0x01A9
#endif /* WINVER >= 0x0400 */
#if defined(_WIN32_WCE) && (_WIN32_WCE >= 0x0400)
#define LB_MULTIPLEADDSTRING    0x01B1
#endif

Y toda la información necesaria sobre los valores de la parametización (WParam/LParam) y el valor de retorno de los mensajes que he mencionado los tienes en la MSDN:



Ejemplo para determinar cambios en un item:

Código
  1. Public Enum ListBoxMessages As Integer
  2.    LB_SETITEMDATA = &H19A
  3.    LB_INSERTSTRING = &H181 ' Equivalente a "LB_SETTEXT"
  4. End Enum
+
Código
  1. Public Class ListBoxEx : Inherits ListBox
  2.  
  3.    <Description("Occurs when the text of a single item has changed")>
  4.    Public Event ItemTextChanged As EventHandler(Of ListBoxItemTextChangedEventArgs)
  5.  
  6.    Protected Overridable Sub OnItemTextChanged(ByVal e As ListBoxItemTextChangedEventArgs)
  7.        If (Me.ItemTextChangedEvent IsNot Nothing) Then
  8.            RaiseEvent ItemTextChanged(Me, e)
  9.        End If
  10.    End Sub
  11.  
  12.    Protected Overrides Sub WndProc(ByRef m As Message)
  13.  
  14.        Select Case m.Msg
  15.  
  16.            Case ListBoxMessages.LB_INSERTSTRING
  17.                Dim itemIndex As Integer = m.WParam.ToInt32()
  18.                If (itemIndex = -1) Then ' Equivalente al último item en la colección.
  19.                    itemIndex = Me.Items.Count
  20.                End If
  21.                Dim newText As String = Marshal.PtrToStringUni(m.LParam)
  22.                Me.OnItemTextChanged(New ListBoxItemTextChangedEventArgs(itemIndex, newText))
  23.  
  24.            Case ListBoxMessages.LB_SETITEMDATA
  25.                Throw New NotImplementedException("")
  26.  
  27.        End Select
  28.  
  29.        MyBase.WndProc(m)
  30.  
  31.    End Sub
  32.  
  33. End Class
+
Código
  1. Public NotInheritable Class ListBoxItemTextChangedEventArgs : Inherits EventArgs
  2.  
  3.    Public ReadOnly Property ItemIndex As Integer
  4.    Public ReadOnly Property NewText As String
  5.  
  6.    Private Sub New()
  7.    End Sub
  8.  
  9.    Public Sub New(ByVal itemIndex As Integer, ByVal newText As String)
  10.        Me.ItemIndex = itemIndex
  11.        Me.NewText = newText
  12.    End Sub
  13.  
  14. End Class

Saludos


« Última modificación: 20 Agosto 2016, 05:05 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo detectar mediante la Api cambios en la información del disco duro. « 1 2 »
Programación Visual Basic
goodbye 12 7,429 Último mensaje 2 Agosto 2005, 00:45 am
por Slasher-K
Como agregar un check box en tiempo de ejecucion????
Programación Visual Basic
agutin1983 0 1,566 Último mensaje 21 Noviembre 2005, 19:55 pm
por agutin1983
¿como detectar nuevos procesos en ejecucion?
Programación C/C++
theghost_te 8 5,225 Último mensaje 23 Diciembre 2010, 05:18 am
por Karman
¿Como crear imagenes en tiempo de ejecucion?
.NET (C#, VB.NET, ASP)
Brian1511 2 2,989 Último mensaje 5 Diciembre 2012, 18:17 pm
por Brian1511
¿Cómo detectar cambios en .text? « 1 2 »
Programación C/C++
Shout 11 5,778 Último mensaje 1 Octubre 2014, 22:38 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines