Drag y Drop entre Lista-Lista o Combo-Lista


Veamos un pequeño ejemplo para hacer Drag Drop entre dos Listas o entre un Combobox y una Lista.

Este es el código para cuando el usuario hace clic en la lista que posee los elementos que se quieren mover

private void listBox2_MouseDown ( object sender, MouseEventArgs e )
{
    try
    {
        //Validamos que se haya seleccionado un elemento
        if ( listBox2.SelectedIndex > -1 )
            //Emepezamos a hacer el Drag del elemento
            listBox2.DoDragDrop ( listBox2.SelectedItem, DragDropEffects.All );
    }
    catch ( Exception ) { }
}

Este es el código para cuando el usuario hace clic en el comboBox que posee los elementos que se quieren mover

private void comboBox1_MouseDown ( object sender, MouseEventArgs e )
{
    try
    {
        //Se usa el DroppedDown para que no se desactive esta funcion cuando se haga clic
        //sobre un elemento, ademas se valida que se haya seleccionado un elemento
        if (comboBox1.SelectedIndex > -1 && comboBox1.DroppedDown == false)
            comboBox1.DoDragDrop ( comboBox1.SelectedItem, DragDropEffects.All );
        else
            comboBox1.DroppedDown = true;
    }
    catch ( Exception ) { }
}

Y por último pero no menos importante, el código para la lista a la cual queremos agregar elementos

Primero tenemos el DragEnter que ocurre cuando el elemento arrastrado entra a la lista

private void listBox1_DragEnter ( object sender, DragEventArgs e )
{
    //DataFormats valida que el objeto es un texto, sino no hace nada
    if ( e.Data.GetDataPresent ( DataFormats.Text ) ) e.Effect = DragDropEffects.All;
    else e.Effect = DragDropEffects.None;
}

Y tenemos el DragDrop que ocurre cuando es soltado el elemento en la lista

private void listBox1_DragDrop ( object sender, DragEventArgs e )
{
    //Se añade el elemento a la lista
    listBox1.Items.Add ( e.Data.GetData ( DataFormats.Text ).ToString () );
    //Se elimina el elemento ya sea de la lista o del combo
    try
    {
        listBox2.Items.Remove ( e.Data.GetData ( DataFormats.Text ).ToString () );
        comboBox1.Items.Remove ( e.Data.GetData ( DataFormats.Text ).ToString () );
    }
    catch ( Exception ) { }
}

En este caso luego de agregar el elemento lo borramos de la lista o comboBox original.

Ahora a usar nuestra imaginación y utilizar cualquier otro control que acepte el AllowDrop

Y este es el Proyecto listo para correrlo dragDropWF.zip. Al finalizar la descarga cambia el formato del archivo, de .odt a .zip

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s