¿Como crear un menu dependiendo del usuario???

25/11/2005 - 12:28 por Adria Grau Rovira | Informe spam
Buenos dias, me dispongo a crear un programa el cual tenga un menu, que lea
las opciones que puede mostrar al usuario que entra en la aplicación.

El menu debería de ser creado cuando se entra en la aplicación, de tal forma
que cuando quiera, pueda poner o quitar algun menu.

Necesito que disponga de un maximo de 3 niveles, ya que con 2 se quedaria
muy mal para lo que quiero.

¿Alguien seria tan amable de hecharme un cable? He probado varias cosas,
pero he conseguido dar con lo que quiero exactamente.

Gracias.

Preguntas similare

Leer las respuestas

#11 Adria Grau Rovira
27/11/2005 - 13:56 | Informe spam
Buenos dias, disculpen que los vuelva a molestar, pero estoyun poco liado con
esto del menu en XML xD.

Al final lo estoy haciendo con xml, me gusta mas y tiene menos codigo :p.
Pero me abordan dos cuestiones:

1.- Cuando creo la opcion del menu, intento ponerle ", AddressOf
HandlMenuClick", el cual declaro despues, para que cuando haga click en esta
opcion del menu haga su accion pertinente. Pero me marca un error, y no se
continuar :(. Como debo codificar esa linea para que me cre el evento click???

2.- Como puedo escribir en un nodo en concreto y crear una estructura de
menu en un fichero XML.???


Espero que puedan responderme a estas preguntas, ya que soy muy nuevo en
esto del .NET y creo que voy un poco perdido en algunas cuestiones nuevas
para mi.


Muchas gracias
Respuesta Responder a este mensaje
#12 Tristan
28/11/2005 - 00:31 | Informe spam
Por lo poco que se, y lo que necesito, tendria que crear el menu en tiempo
de ejecucion copiando las opciones a un archivo xml, el cual deberia de
leer
para crear el menu, por lo que estaria empleando el doble del tiempo.



Esta parte no la entiendo, o empleas tiempo en leer la BD y luego creas el
menú a partir del DataSet, o empleas algo menos de tiempo en leer el
documento xml desde un campo de la BD y luego creas el menú. Sin hacer
pruebas creo que la opción de xml será algo más rápida.

A no ser que si utilizo xml, cree un fichero para cada persona, y un
sistema
gestor, el cual lea y escriba xml, para luego cuando cargue la aplicación
que
busque el fichero que corresponda al usuario. Si lo hago asi, si que me
serviria mejor xD.



Esa es una de las muchas maneras.

Creas una fila en la BD con dos campos: usuario y xml de menú. Luego lees el
xml correspondiente al usuario y aplicas la función que te he pasado.

Otra forma sería crear un atributo para cada item del menú que identifique
el usuario o grupo de usuarios que disponga de esa opción. Para seleccionar
los items del usuario podrías hacerlo a pedal dentro de la función CreaMenu
que te he dado, con un simple if. Todavía mejor, podrías seleccionar de un
solo golpe los nodos que te interesan mediante XPath, si bien eso requiere
que conozcas la forma de seleccionar usando XPath.


Juan Carlos Badiola
MVP - C#
"Adria Grau Rovira" escribió en el mensaje
news:

Haber si consigo explicarme mejor:
No tengo mucha idea de programar con .net y menos utilizar xml.
Por lo poco que se, y lo que necesito, tendria que crear el menu en tiempo
de ejecucion copiando las opciones a un archivo xml, el cual deberia de
leer
para crear el menu, por lo que estaria empleando el doble del tiempo.

A no ser que si utilizo xml, cree un fichero para cada persona, y un
sistema
gestor, el cual lea y escriba xml, para luego cuando cargue la aplicación
que
busque el fichero que corresponda al usuario. Si lo hago asi, si que me
serviria mejor xD.

Mañana lo estudiare y haber como lo hago al final.

Gracias
Respuesta Responder a este mensaje
#13 Tristan
28/11/2005 - 00:50 | Informe spam
Me alegro de que utilices XML, en efecto creo que produce menos código, más
legible y elegante, y sobre todo más flexible.

Para la primera pregunta, espero que te sirva este código modificado del
ejemplo anterior:

Dim xml As New XmlDocument
xml.Load("..\xmlfile1.xml")
Dim menu As New MainMenu
CreaMenu(menu, xml("menu"))
Me.Menu = menu

Private Sub CreaMenu(ByVal menu As Menu, ByVal nodo As XmlNode)
For Each hijo As XmlNode In nodo
Dim item As New MenuItem(hijo.Attributes("texto").Value, AddressOf
OnItemClick)
menu.MenuItems.Add(item)
CreaMenu(item, hijo)
Next
End Sub

Private Sub OnItemClick(ByVal sender As Object, ByVal e As EventArgs)
Dim item As MenuItem = CType(sender, MenuItem)
MsgBox(item.Text)
End Sub

Paso el delegado en el constructor de MenuItem. Podrías hacerlo también
mediante AddHandler, pero ya que el constructor tiene esa sobrecarga, creo
que es mejor así.

Para la segunda pregunta, no entiendo bien. ¿Por qué tienes que crear el
documento xml por programa? ¿No te sirve crearlo en tiempo de diseño y
asignar su contenido al campo de la BD? En todo caso XMLDocument permite
modificar el documento, añadir nodos, obtener el xml equivalente y guardarlo
en la BD. ¿Estás seguro de necesitarlo? Precisamente una de las ventajas de
usar XML en tu caso es que es muy fácil crear el menú a mano.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#14 Adria Grau Rovira
28/11/2005 - 08:57 | Informe spam
"Tristan" wrote:

Creas una fila en la BD con dos campos: usuario y xml de menú. Luego lees el
xml correspondiente al usuario y aplicas la función que te he pasado.




Esto me iria bien, pero, ¿como guardo y leo el documento xml que quiero en
la BD?

En cuanto a lo de crear el documento en tiempo de diseño, no puede ser, ya
que tengo idea de crear un gestor de documentos xml (igual me sirve el propio
writer de windows) y asi que pueda cambiar los permisos de los usuarios desde
el mismo programa, sin tener que buscar la ruta donde guardo los documentos.

PD: El codigo anterior me sirvio de mucho (estava intentando poner el
addressof en el lugar equivocado :( )
Respuesta Responder a este mensaje
#15 Tristan
28/11/2005 - 11:14 | Informe spam
Esto me iria bien, pero, ¿como guardo y leo el documento xml que quiero en
la BD?



Guardarlo no veo para qué. Como te he dicho lo único que haría es escribir
el documento xml en cualquier editor, bloc de notas, visual estudio, ... Una
vez creado copias y pegas el contenido a la BD a través de cualquier programa
de edición de la BD, Access, el propio que viene en vs.net, etc...

En cuanto a lo de crear el documento en tiempo de diseño, no puede ser, ya
que tengo idea de crear un gestor de documentos xml (igual me sirve el propio
writer de windows) y asi que pueda cambiar los permisos de los usuarios desde
el mismo programa, sin tener que buscar la ruta donde guardo los documentos.



Imagino que cuando hablas del writer de windows te refieres a un editor de
textos, si es así, en efecto. Desde vs.net es más cómodo entre otras cosas
por que verifica la validez del documento XML.

En cuanto a los permisos, tal vez te interese tal y como te dije en otro
mensaje crear un xml para cada usuario con el menú completo de opciones que
puede utilizar ese usuario. Una fila de la BD con dos campos usuario y xml
completo del menú de ese usuario. Tal vez por el contrario prefieras una sola
fila de la BD con el menú de todos los usuarios en un solo documento xml, en
ese caso podrías indicar como atributo de cada item del xml el usuario o
usuarios que dispondrán de esa opción de menú. ¿Me explico?

Juan Carlos Badiola Saiz
MVP - C#
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida