none
Menu Contextual en un listbox RRS feed

  • Pregunta

  • Hola!!

    Quisiera saber como mostrar un messagebox mediante un contextmenu asociado a un listbox, es decir, al hacer click con el boton derecho sobre el listbox seleccionar un item  del listbox, que aparezca un contextmenu en el cual una opción será mostrar un messagebox.

    Gracias, ojala me puedan ayudar.

    martes, 28 de septiembre de 2010 15:39

Respuestas

  • Bueno para poder hacer eso ya deberias tener el ListBox y el ContextMenu en el formulario, siendo así entonces programas el Evento MouseUp del ListBox y agregas el siguiente código:

        private void listBox1_MouseUp(object sender, MouseEventArgs e)
        {
          if (e.Button == MouseButtons.Right)
          {
            int index = listBox1.IndexFromPoint(e.Location);
            listBox1.SelectedIndex = index;
            contextMenuStrip1.Show(Control.MousePosition);
          }
        }
    

    se selecciona el item del Listbox sobre el cual se preciono el boton de derecho del mouse y se muestra en menú contextual, luego solo selecciona la opción que quieres en el menú y has click sobre ella y según la opción programas el evento del click y lo programas para que muestre lo que quieres que muestre, como por ejemplo:

        private void mostrarMessageBoxToolStripMenuItem_Click(object sender, EventArgs e)
        {
          MessageBox.Show((string)listBox1.SelectedItem);
        }
    

    Salu2


    No le temas a la competencia, temele a tu propia incompetencia.
    martes, 28 de septiembre de 2010 16:38
    Moderador
  • "lessdak" preguntó:

    > Quisiera saber como mostrar un messagebox mediante un contextmenu
    > asociado a un listbox, es decir, al hacer click con el boton
    > derecho sobre el listbox seleccionar un item  del listbox,
    > que aparezca un contextmenu en el cual una opción será
    > mostrar un messagebox.

    Con el botón derecho del ratón no vas a poder seleccionar un elemento del control ListBox; tendrás que seleccionarlo con el botón izquierdo, porque el botón derecho es para mostrar precisamente el menú contextual asociado con el control ListBox.

    Configura en tiempo de diseño un objeto ContextMenuStrip, y en el evento Load del formulario, lo asociarías al control ListBox de la siguiente manera:

         listBox1.ContextMenuStrip = this.contextMenuStrip1;

    Ahora, tendrás que habilitar los eventos Click de cada uno de los elementos que forman el control ContextMenuStrip, que serán los procedimientos de evento que se desencadenarán cuando hagas clic con el botón derecho sobre un elemento cualquiera de su menú contextual.

    Vamos a suponer que un elemento del menú contextual se llama mostrarMessageBoxToolStripMenuItem. Este sería su procedimiento de evento Click:

            private void mostrarMessageBoxToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Se ha seleccionado el elemento " + listBox1.SelectedIndex.ToString());
            }

    Un saludo

     


    Enrique Martínez [MS MVP - VB]
    martes, 28 de septiembre de 2010 16:38

Todas las respuestas

  • En el diseñador, añade un System.Windows.Forms.ContextMenu a tu Form,
    digamos, contextMenu1. Añade los menús que quieras, como si se tratara de un
    menú normalito. Luego, en tu ListBox, ve a la propiedad ContextMenu y
    establece la propiedad al menú que creaste con anterioridad (digamos,
    contextMenu1). Todo esto lo puedes hacer desde el diseñador. Y lixto.
     
    Si quieres puedes mirar este ejemplo:
    http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/AddContextMenutoListBox.htm
     
    Saludos.
     
     


    Fernando Gómez
    fermasmas.wordpress.com
    martes, 28 de septiembre de 2010 16:37
  • Bueno para poder hacer eso ya deberias tener el ListBox y el ContextMenu en el formulario, siendo así entonces programas el Evento MouseUp del ListBox y agregas el siguiente código:

        private void listBox1_MouseUp(object sender, MouseEventArgs e)
        {
          if (e.Button == MouseButtons.Right)
          {
            int index = listBox1.IndexFromPoint(e.Location);
            listBox1.SelectedIndex = index;
            contextMenuStrip1.Show(Control.MousePosition);
          }
        }
    

    se selecciona el item del Listbox sobre el cual se preciono el boton de derecho del mouse y se muestra en menú contextual, luego solo selecciona la opción que quieres en el menú y has click sobre ella y según la opción programas el evento del click y lo programas para que muestre lo que quieres que muestre, como por ejemplo:

        private void mostrarMessageBoxToolStripMenuItem_Click(object sender, EventArgs e)
        {
          MessageBox.Show((string)listBox1.SelectedItem);
        }
    

    Salu2


    No le temas a la competencia, temele a tu propia incompetencia.
    martes, 28 de septiembre de 2010 16:38
    Moderador
  • "lessdak" preguntó:

    > Quisiera saber como mostrar un messagebox mediante un contextmenu
    > asociado a un listbox, es decir, al hacer click con el boton
    > derecho sobre el listbox seleccionar un item  del listbox,
    > que aparezca un contextmenu en el cual una opción será
    > mostrar un messagebox.

    Con el botón derecho del ratón no vas a poder seleccionar un elemento del control ListBox; tendrás que seleccionarlo con el botón izquierdo, porque el botón derecho es para mostrar precisamente el menú contextual asociado con el control ListBox.

    Configura en tiempo de diseño un objeto ContextMenuStrip, y en el evento Load del formulario, lo asociarías al control ListBox de la siguiente manera:

         listBox1.ContextMenuStrip = this.contextMenuStrip1;

    Ahora, tendrás que habilitar los eventos Click de cada uno de los elementos que forman el control ContextMenuStrip, que serán los procedimientos de evento que se desencadenarán cuando hagas clic con el botón derecho sobre un elemento cualquiera de su menú contextual.

    Vamos a suponer que un elemento del menú contextual se llama mostrarMessageBoxToolStripMenuItem. Este sería su procedimiento de evento Click:

            private void mostrarMessageBoxToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Se ha seleccionado el elemento " + listBox1.SelectedIndex.ToString());
            }

    Un saludo

     


    Enrique Martínez [MS MVP - VB]
    martes, 28 de septiembre de 2010 16:38
  • "Marvin E. Pineda" escribió:

    > private void listBox1_MouseUp(object sender, MouseEventArgs e)
    >    {
    >      if (e.Button == MouseButtons.Right)
    >      {
    >        int index = listBox1.IndexFromPoint(e.Location);
    >        listBox1.SelectedIndex = index;
    >        contextMenuStrip1.Show(Control.MousePosition);
    >      }
    >    }

    ¡Leches! No me acordaba ya del método IndexFromPoint para obtener el índice del elemento del control ListBox existente en las coordenadas especificadas.

    Muy bien, Marvin.

    Un saludo

     


    Enrique Martínez [MS MVP - VB]
    martes, 28 de septiembre de 2010 17:01
  • Muchas gracias a todos, fueron de gran utilidad sus respuestas.

    Saludos.

     

    miércoles, 29 de septiembre de 2010 15:22