none
Arrastrar un treeviewItems a grid RRS feed

  • Pregunta

  • Hola a todos , pues de ante mano les doy las gracias por leer mi pregunta:( pues hoy vengo con un problemita no se si complicado pero para mi si jeje quiero hacer q un treeview items o un treeview pueda ser arrastrado y colocar el texto q contiene el treeview en un grid. Notifico q estoy utilizando la version 4.0 de .Net FrameWork y se que aca los eventos que podrian ayudarme son el mousedown, el mousemove o bien el dragenter pero no tengo idea como hacerlo:( si se apiadan de mi porfa les agradeceria mucho
    jueves, 21 de octubre de 2010 19:56

Respuestas

  • Hola!

    Supongo que el texto lo querras meter dentro de algún control contenido dentro del grid y no en el grid directamente... hacer esto para un textbox es muy facil:

    Vamos a definir en xaml un treeview con algunos items y un textbox:

      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition/>
          <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TreeView   Grid.Column="0"   Name="treeview1"   TreeViewItem.PreviewMouseLeftButtonDown="treeview1_PreviewMouseLeftButtonDown">
          <TreeViewItem Header="Root">
            <TreeViewItem Header="item1"/>
            <TreeViewItem Header="item2"/>
            <TreeViewItem Header="item3"/>
          </TreeViewItem>
        </TreeView>
        <TextBox Grid.Column="1" Name="textBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
      </Grid>
    

    Bien, como verás estoy usando el evento PreviewMouseLeftButtonDown, en este evento es donde iniciamos el Drag and Drop con este código:

        private void treeview1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
          TreeViewItem item = e.Source as TreeViewItem;
          if (item != null)
          {
            DataObject dataObject = new DataObject();
            dataObject.SetData(DataFormats.StringFormat, item.Header.ToString());
            DragDrop.DoDragDrop(item, dataObject, DragDropEffects.Copy); 
          }
        }
    

    Con esto puedes seleccionar cualquier nodo del treeview y su Header se colocará en el textbox!

    Espero que te sirva, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Propuesto como respuesta CorsarioVasco domingo, 24 de octubre de 2010 19:00
    • Marcado como respuesta victor_23 domingo, 31 de octubre de 2010 18:11
    sábado, 23 de octubre de 2010 9:52
    Moderador
  • Hola disculpa josue pues si me funciono pero esto en las versiones del 3.5 no encontre con el .net framework 4.0 pues raro verdad, la cuestion esta que para evitarme eso me lo programe manual hice que en el evento de presionar el boton izquiero del mouse se guarde el elemento seleccionado en el nodo, despues utilice funciones del string.substring() para eliminar la letra que trae antes del header del nodo u luego hice una busqueda de la palabra Item para eliminar lo restant asi aca te muestro

     

                         dato = tre.SelectedItem.ToString();
                        dato = dato.Substring(44); // quitar el objeto q contiene al control
                        s = dato.IndexOf("Item"); //buscar el nombre de Item para agregar solo header
                        dato = dato.Remove(s - 1); //eliminar el ultimo espacio restante

    • Marcado como respuesta victor_23 domingo, 31 de octubre de 2010 18:11
    domingo, 31 de octubre de 2010 2:35

Todas las respuestas

  • Hola!

    Supongo que el texto lo querras meter dentro de algún control contenido dentro del grid y no en el grid directamente... hacer esto para un textbox es muy facil:

    Vamos a definir en xaml un treeview con algunos items y un textbox:

      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition/>
          <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <TreeView   Grid.Column="0"   Name="treeview1"   TreeViewItem.PreviewMouseLeftButtonDown="treeview1_PreviewMouseLeftButtonDown">
          <TreeViewItem Header="Root">
            <TreeViewItem Header="item1"/>
            <TreeViewItem Header="item2"/>
            <TreeViewItem Header="item3"/>
          </TreeViewItem>
        </TreeView>
        <TextBox Grid.Column="1" Name="textBox" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
      </Grid>
    

    Bien, como verás estoy usando el evento PreviewMouseLeftButtonDown, en este evento es donde iniciamos el Drag and Drop con este código:

        private void treeview1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
          TreeViewItem item = e.Source as TreeViewItem;
          if (item != null)
          {
            DataObject dataObject = new DataObject();
            dataObject.SetData(DataFormats.StringFormat, item.Header.ToString());
            DragDrop.DoDragDrop(item, dataObject, DragDropEffects.Copy); 
          }
        }
    

    Con esto puedes seleccionar cualquier nodo del treeview y su Header se colocará en el textbox!

    Espero que te sirva, un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    • Propuesto como respuesta CorsarioVasco domingo, 24 de octubre de 2010 19:00
    • Marcado como respuesta victor_23 domingo, 31 de octubre de 2010 18:11
    sábado, 23 de octubre de 2010 9:52
    Moderador
  • Hola, gracias por contestar.

    ahorita mismo lo pruebo te notifico haber como me fue:) gracias

    lunes, 25 de octubre de 2010 16:04
  • Hola victor!

    ¿Te funciono la solución? un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    miércoles, 27 de octubre de 2010 16:04
    Moderador
  • Hola disculpa josue pues si me funciono pero esto en las versiones del 3.5 no encontre con el .net framework 4.0 pues raro verdad, la cuestion esta que para evitarme eso me lo programe manual hice que en el evento de presionar el boton izquiero del mouse se guarde el elemento seleccionado en el nodo, despues utilice funciones del string.substring() para eliminar la letra que trae antes del header del nodo u luego hice una busqueda de la palabra Item para eliminar lo restant asi aca te muestro

     

                         dato = tre.SelectedItem.ToString();
                        dato = dato.Substring(44); // quitar el objeto q contiene al control
                        s = dato.IndexOf("Item"); //buscar el nombre de Item para agregar solo header
                        dato = dato.Remove(s - 1); //eliminar el ultimo espacio restante

    • Marcado como respuesta victor_23 domingo, 31 de octubre de 2010 18:11
    domingo, 31 de octubre de 2010 2:35