ComboBoxes

24/02/2006 - 20:40 por Alfonsina | Informe spam
Como hago para pegar información de un comboBox a otro y como hago para
eliminar los items de una comboBox( con el metodo Clear no pude)??Si alquien
me puede ayudar se lo agradezco!!saludos!
 

Leer las respuestas

#1 Luis Miguel Blanco
01/03/2006 - 23:47 | Informe spam
Hola Alfonsina

Por el modo en cómo has formulado tu pregunta, entiendo que lo que necesitas
es realizar una operación de "arrastrar y soltar" desde uno de los ComboBox
al otro, y que además, el elemento que has arrastrado desde el combo origen
sea eleminado de este.

Partiendo de esta situación, lo que necesitarías en primer lugar, sería
guardar el índice del elemento seleccionado en el combo origen, para poder
eliminarlo cuando haya terminado la operación de arrastrar y soltar.

En segundo lugar, debes escribir en el evento MouseDown del combo origen, el
código que inicie la operación de arrastrar, llamando al método DoDragDrop()
de dicho combo, y pasando como parámetros, el elemento seleccionado mediante
la propiedad SelectedItem, y el tipo de efecto de arrastrar y soltar
utilizando la enumeración DragDropEffects.

Pasando a la operación de soltar en el combo destino, en este control debes
implementar el evento DragOver(), para detectar si se está produciendo una
operación de soltado de un elemento en su lista de items; y por último,
implementar el evento DragDrop(), que sería el que realmente deposita el
elemento arrastrado en el combo destino. Mediante el parámetro DragEventArgs
de este evento, comprobaremos si hay un valor a soltar, y obtendremos dicho
elemento, que añadiremos a la colección Items del combo destino, mientras lo
eliminamos del combo origen.

A continuación te acompaño un bloque de código con ejemplos de todas estas
operaciones que te he comentado, para que realices tus pruebas y las adaptes
a tu aplicación si te son válidas.

'///////////////////////////////////////
Public Class frmDragDropCombo
Inherits System.Windows.Forms.Form

' MUY IMPORTANTE!!!!!
' debemos asignar en el control ComboBox la propiedad AllowDrop a True

Private nIndiceElementoSeleccionado As Integer
'
'

Private Sub cboOrigen_SelectedIndexChanged(ByVal sender As Object, ByVal
e As System.EventArgs) Handles cboOrigen.SelectedIndexChanged
nIndiceElementoSeleccionado = Me.cboOrigen.SelectedIndex
End Sub

Private Sub cboOrigen_MouseDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles cboOrigen.MouseDown
Dim xDragDropEff As DragDropEffects

If Not (Me.cboOrigen.DroppedDown) Then
xDragDropEff =
Me.cboOrigen.DoDragDrop(Me.cboOrigen.SelectedItem, _
DragDropEffects.All Or DragDropEffects.Link)
End If
End Sub

Private Sub cboDestino_DragOver(ByVal sender As Object, ByVal e As
System.Windows.Forms.DragEventArgs) Handles cboDestino.DragOver
If Not (e.Data.GetDataPresent(GetType(System.String))) Then
e.Effect = DragDropEffects.None
Return
End If

e.Effect = DragDropEffects.Copy
End Sub

Private Sub cboDestino_DragDrop(ByVal sender As Object, ByVal e As
System.Windows.Forms.DragEventArgs) Handles cboDestino.DragDrop
Dim oElementoDrop As Object

If (e.Data.GetDataPresent(GetType(System.String))) Then
oElementoDrop = CType(e.Data.GetData(GetType(System.String)),
System.Object)

If (e.Effect = DragDropEffects.Copy Or _
e.Effect = DragDropEffects.Move) Then

Me.cboDestino.Items.Add(oElementoDrop)
Me.cboDestino.SelectedItem = oElementoDrop
Me.cboOrigen.Items.RemoveAt(nIndiceElementoSeleccionado)
End If
End If
End Sub

End Class
'///////////////////////////////////////

Por otra parte, también dices que has utilizado el método Clear() del
ComboBox para eliminar sus items y que no has podido. Es extraño esto que
comentas, ya que yo he realizado la prueba y sí los ha quitado. Debes tener
en cuenta que si hay una cadena de texto en la parte editable del control, el
método Clear() no la quita, lo cual deberás hacerlo aparte. Te adjunto
también el código de un botón que he añadido a mi formulario para borrar los
items del combo, y que sí me ha funcionado.

'///////////////////////////////////////
Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnLimpiar.Click
Me.cboDestino.Items.Clear()
Me.cboDestino.Text = String.Empty
End Sub
'///////////////////////////////////////

Bien, pues esto es todo, espero que te sea de ayuda.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Alfonsina" wrote:

Como hago para pegar información de un comboBox a otro y como hago para
eliminar los items de una comboBox( con el metodo Clear no pude)??Si alquien
me puede ayudar se lo agradezco!!saludos!

Preguntas similares