C sharp - Ocultar dinamicamente opciones de menustrip

   
Vista:

Ocultar dinamicamente opciones de menustrip

Publicado por edison (2 intervenciones) el 06/08/2016 00:51:41
Estimados buenas tardes, espero que me ayuden con el siguiente caso:

Tengo una tabla en SQL server 2008 donde almaceno los ids de la opciones de un menuStrip, asimismo en esta tabla se almacena en un campo si el menú es visible o no (ver primera imagen)

Imagen1


en un formulario c# tengo un datagridview donde recupero los datos de la tabla anterior (ver imagen 2)
Imagen2

En el boton que aparece en la imagen 2 tengo el siguiente codigo:

1
2
3
4
5
6
7
8
9
private void button1_Click(object sender, EventArgs e)
{
	ToolStripMenuItem menuid;
	foreach (DataGridViewRow row in dgv_autorizacion.Rows)
	{
		menuid = new ToolStripMenuItem(row.Cells["menu_id"].Value.ToString());
		menuid.Visible = Convert.ToBoolean(row.Cells["Visible"].Value.ToString());
	}
}
Lo que debería realizar este código es ocultar las opciones del menú según el valor de la columna "Visible" de la grilla, el tema es que no los oculta, cabe mencionar que los nombres de los ToolStripMenuItem estan con los mismos nombres que se encuentran en grilla (ver imagen 3)


Imagen3

Por favor ayúdenme, he pasado todo el día con este tema y no doy con la solución.

POSDATA : No soy desarrollador, espero comprendan.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ocultar dinamicamente opciones de menustrip

Publicado por Miguel (91 intervenciones) el 06/08/2016 01:05:54
Hola,
No entiendo, ¿quieres configurar las opciones disponibles para cada usuario?... Creo que es mejor que hagas esto (diseñar y programar el menú) en tiempo de diseño y no en tiempo de ejecución. Al inicio solo oculta los items (Visible=false) del menú que están bloqueados y ya.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ocultar dinamicamente opciones de menustrip

Publicado por edison (2 intervenciones) el 06/08/2016 03:39:01
Mi las opciones de mi menú son demasiadas para realizarlo en tiempo de diseño, considerando que manejó más de 20 perfiles. Pero gracias x la sugerencia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ocultar dinamicamente opciones de menustrip

Publicado por Nacho (34 intervenciones) el 06/08/2016 09:45:12
En un menustrip las opciones que no quieres que aparezcan no se ocultan, simplemente no se añaden. Tiene un evento que se produce cuando tiene que mostrar el submenú. Ahí añades algo o no según esté en la tabla visible o no.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ocultar dinamicamente opciones de menustrip

Publicado por Miguel (91 intervenciones) el 06/08/2016 20:15:18
Cierto, aunque por mi parte prefiero ocultar/quitar items del menú; se me facilita sobre todo cuando utilizo otros tipos de items.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ocultar dinamicamente opciones de menustrip

Publicado por Diego (9 intervenciones) el 11/08/2016 20:29:53
Hola, lo que puedo alcanzar a notar en tu código es que no estas referenciando a los menús existentes dentro del formulario. Cuando estas utilizando la palabra reservada "new" automáticamente estas creando un nuevo componente toolStripMenu.

Este nuevo componente al tener su propiedad visible false no se podrá ver, de la misma manera colocándolo en true de la misma forma no aparecería debido a que no esta vinculado a su componente contenedor que es el toolStripMenu.

Un saludo y espero que te haya ayudado esta información.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alpanpan

Ocultar dinamicamente opciones de menustrip

Publicado por Alpanpan (33 intervenciones) el 29/08/2016 01:00:48
Mira si esto te puede servir
1º He creado un form con un menuStrip ( menuStrip1 )
2º Al menuStrip1, lo he añadido varios menús, los que se ven en la tu 1ª imagen, y de nombre los he puesto id_xxxxx.
3º He añadido un textBox ( textBox1 ), y un botón ( button1 )
4º a este último lo he añadido el siguiente código, en el evento Click
1
2
if( menuStrip1.Items.ContainsKey(textBox1.Text ) )
{ menuStrip1.Items[textBox1.Text].Visible = !menuStrip1.Items[textBox1.Text].Visible; }
Funcionamiento:
Al introducir en el textbox, un id_??, y pulsar el botón, comprieba si existe dentro de menuStrip1, y si existe, cambia su estado de visible a oculto y viceversa.
Si quieres que lo haga tambien en submenús, tendrás que hacer una busqueda recursiva
En este caso, no he conseguido que los submenús desaparezcan, pero si desactivarlos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
private void button1_Click(object sender, EventArgs e)
        {
            if( menuStrip1.Items.ContainsKey(textBox1.Text ) )
            {
 
                menuStrip1.Items[textBox1.Text].Visible = !menuStrip1.Items[textBox1.Text].Visible;
            }
            else
            {
                foreach(ToolStripMenuItem item in menuStrip1.Items)
                {
                    if( busca(item) ) return;
                }
            }
        }
        private bool busca(ToolStripMenuItem item)
        {
            if (item.DropDownItems.ContainsKey(textBox1.Text))
            {
                item.DropDownItems[textBox1.Text].Enabled = !item.DropDownItems[textBox1.Text].Enabled;
                return true;
            }
            else
            {
                if (item.DropDownItems.Count != 0)
                {
                    foreach (ToolStripDropDownItem subitem in item.DropDownItems)
                    {
                        if (buscaSubitems(subitem)) return true;
                    }
                }
            }
            return false;
        }
        private bool buscaSubitems(ToolStripDropDownItem subitem)
        {
            if (subitem.DropDownItems.ContainsKey(textBox1.Text))
            {
                subitem.DropDownItems[textBox1.Text].Enabled = !subitem.DropDownItems[textBox1.Text].Enabled;
                return true;
            }
            else
            {
                if (subitem.DropDownItems.Count !=0 )
                {
                    foreach (ToolStripDropDownItem subitem2 in subitem.DropDownItems)
                    {
                        return buscaSubitems(subitem2);
                    }
                }
            }
            return false;
        }
Seguro que se puede mejorar, pero hasta aquí llego yo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar