Lo siento pero no se como se le llama a lo que pretendo hacer, así que le llamaré "easy-find" xD,
Esta listview tiene 4 columnas, y me gustaría que la listview se comportase de la siguiente manera con la columna nº 2 ("Archivo"):
- Al pulsar una tecla del teclado (una tecla del alfabeto), visualizar/seleccionar la primera línea que empiece por esa letra.
- (MENOS IMPORTANTE) > Si la columna está desordenada, la misma lógica pero seleccionar la línea más cercana empezando a buscar desde la linea seleccionada, HACIA ABAJO.
Imagino que costará un poco de trabajo así que no lo pido todo hecho, pero ayúdenme a empezar, lo del evento "OnKeyPress" es fácil de hacer, pero no sé como podría hacer el "easy-find"...
Para el primer problema he pensado en recorrer con un FOR todo el array de "ListView.Items()" para buscar el subitem que empiece por la letra presionada, pero de todas formas he preferido hacer este post por si saben de alguna manera más sencilla y/o rápida.
(http://img11.imageshack.us/img11/8733/prtscrcapturevv.jpg)
el mismo listview ya tiene metodos de busqueda, si lo buscas en internet en 3 segundos lo encontras :silbar:, por ejemplo algo simple con FindItemWithText
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim lvItem As ListViewItem = ListView1.FindItemWithText("G", False, 0, True)
If (lvItem IsNot Nothing) Then
ListView1.Items(lvItem.Index).Selected = True
ListView1.Select()
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListView1.Columns.Add("Columna 1")
ListView1.View = View.Details
ListView1.FullRowSelect = True
For i As Int16 = Convert.ToInt16("A"c) To Convert.ToInt16("Z"c)
Dim letter As Char = Convert.ToChar(i)
ListView1.Items.Add(letter)
Next
End Sub
End Class
carga todas las letras del abecedario en una columna y despues con el boton busca la letra "G" y la selecciona.
despues tenes otras como FindNearestItem, para seguir buscando a partin de una posicion determinada, hay varias formas.
uf, muchas gracias Seba,
me quitas un peso de encima con ese method, estaba cagado de miedo por si la única alternativa era usar el ObjectListView (Alguna de sus propiedades que hiciera eso automáticamente), no sé si será muy lógico lo que acabo de decir... porque siempre se puede codear lo necesario o en este caso ya hay un method que nos ayuda a hacerlo, pero ... :xD
PD: Deseando ver un día de estos un tutorial de como crear el modelo de objeto para agregar un item en el ObjectListView :silbar: ;D
Saludos
Cita de: EleKtro H@cker en 6 Enero 2013, 03:33 AM
PD: Deseando ver un día de estos un tutorial de como crear el modelo de objeto para agregar un item en el ObjectListView :silbar: ;D
si, lo estoy haciendo :xD, no solo eso, sino como hacer varias cosas mas, entre ellas la busqueda del objectlistview que es super potente.
Cita de: seba123neo en 6 Enero 2013, 03:44 AMsi, lo estoy haciendo :xD
A ver si no recuerdo mal
spiritdead dijo que el objeto se debe crear en una class, de ser así imagino que esa manera será para agregar objetos/items predefinidos al listview,
¿Pero que pasa entonces si yo necesito añadir los items sin conocer cuales son los items? es decir, por ejemplo parsear un texto delimitado e ir agregando los items uno por uno:
Línea de un texto cualquiera:
Simple Plan - I Can Wait Forever;4m:54s;128 Kbps;4,49 MB
Ejemplo de como se añadiría en un listview convencional:
' llamo al sub que hace un SPLIT en cada línea del texto...
' Seteo los strings...
Listview_Row_STR(1) = TextDelimited(0)
Listview_Row_STR(2) = TextDelimited(1)
Listview_Row_STR(3) = TextDelimited(2)
' Y añado el item
Listview_Item = New ListViewItem(Listview_Row_STR)
GListView.Items.Add(Listview_Item)
¿En el tutorial explicarás como hacer algo así? me refiero a añadir los items "en tiempo real", sin haberlos predefinido en una class.
Bueno, ya me esperaré a que salga el tuto para hacer allí las preguntas xD.
Saludos.
Cita de: EleKtro H@cker en 6 Enero 2013, 03:56 AM
A ver si no recuerdo mal spiritdead dijo que el objeto se debe crear en una class, de ser así imagino que esa manera será para agregar objetos/items predefinidos al listview,
¿Pero que pasa entonces si yo necesito añadir los items sin conocer cuales son los items? es decir, por ejemplo parsear un texto delimitado e ir agregando los items uno por uno:
Línea de un texto cualquiera:
Simple Plan - I Can Wait Forever;4m:54s;128 Kbps;4,49 MB
Ejemplo de como se añadiría en un listview convencional:
' llamo al sub que hace un SPLIT en cada línea del texto...
' Seteo los strings...
Listview_Row_STR(1) = TextDelimited(0)
Listview_Row_STR(2) = TextDelimited(1)
Listview_Row_STR(3) = TextDelimited(2)
' Y añado el item
Listview_Item = New ListViewItem(Listview_Row_STR)
GListView.Items.Add(Listview_Item)
¿En el tutorial explicarás como hacer algo así? me refiero a añadir los items "en tiempo real", sin haberlos predefinido en una class.
Bueno, ya me esperaré a que salga el tuto para hacer allí las preguntas xD.
Saludos.
si usaras objectlistview, debes tener en cuanta varios aspectos
puedes usar structures o clases