Los Context Menús aparecen generalmente en la cabeza de un formulario (ContextMenuStrip) o cuando un usuario realiza un clic con el botón derecho del Mouse en una localización específica de un formulario de Windows.
Para crear un Context Menú, lo primero que se debe hacer es definir un objeto de este tipo. Para ello, existen dos formas de hacer esta acción:
- Utilizando el Control ContextMenuStrip desde el Menú de Herramientas.
a) Arrastrar desde el menú de herramientas el control ContextMenuStrip, que permite editar las acciones que se harán a través de este menú.b) Asignar el control Context Menú al control con el cual se desea trabajar, utilizando la propiedad ContextMenuStrip, es decir, si se tiene un control TextBox, en las opciones de propiedad de éste, se debe asignar Context Menú al control, ver figura.
- Crear el Context Menú Mediante Líneas de Código.
a) Crear el control de menú que contendrá los Menús Items que se definanPrivate cxMenu as New ContextMenu()
b) Definir los Menús Items que permitirán cargar los textos de los menús, esto se realiza en la sección que permite definir las variables globales de la clasePublic WithEvents mnuItem1 As New MenuItem("&Abrir")
Public WithEvents mnuItem2 As New MenuItem("&Limpiar")
Public WithEvents mnuItem3 As New MenuItem("Color Letra")
Public WithEvents mnuItem4 As New MenuItem("Color Fondo")
c) Incluir los Menú Items al Context Menú definidoWith Me.cxMenu
.MenuItems.Add(Me.mnuItem1)
.MenuItems.Add(Me.mnuItem2)
.MenuItems.Add(Me.mnuItem3)
.MenuItems.Add(Me.mnuItem4)
End With
d) Asignar el Context Menú al control especificado.Me.Txt.ContextMenu = cxMenu
e) Crear los métodos que controlarán los eventos del Context Menú, de la siguiente forma:
Public Sub mnuItemAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuItem1.Click
End Sub
f) Si desea que un método controle más de un evento se debe agregar en la sección de Handles, los eventos que se deben atender de los diversos objetos creados, ejemplo:Public Sub mnuItemAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuItem1.Click, mnuItem2.Click
End Sub
Ejemplo de código.
a) Crear un proyecto de Windows
Agregar tres controles:
Control Label
Nombre: Label1
Texto: Buscar Dirección de Archivo:
Control Texbox
Nombre Textbox1
Control ListBox
Nombre: ListBox1
b) Fijar los controles de la forma en que se muestra en la imagen
a) Crear el Context Menú con el siguiente nombre
Private cxMenu As New ContextMenu()
b) Crear los Menú Item que contendrán las opciones de menús que se utilizarán en el sistema.Public WithEvents mnuItem1 As New MenuItem("&Abrir")
Public WithEvents mnuItem2 As New MenuItem("&Limpiar")
Public WithEvents mnuItem3 As New MenuItem("Color Letra")
Public WithEvents mnuItem4 As New MenuItem("Color Fondo")
c) Incluir los Menú Items dentro del control de menú creado y asignar el Context Menú al control que lo utilizará en el Load de la página.
With Me.cxMenu
.MenuItems.Add(Me.mnuItem1)
.MenuItems.Add(Me.mnuItem2)
.MenuItems.Add(Me.mnuItem3)
.MenuItems.Add(Me.mnuItem4)
End With
Me.TextBox1.ContextMenu = Me.cxMenu
d) Definir los métodos que atenderán los eventos de los objetos.
Public Sub mnuItemAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuItem1.Click
End Sub
Public Sub mnuItemLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuItem2.Click
End Sub
Public Sub mnuItemColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuItem3.Click, mnuItem4.Click
End Sub
e) Dentro del método mnuItemAbrir_Click agregar las siguientes líneas de código
Dim fl As New OpenFileDialog
Dim flName() As String
' definir los archivos que se pueden buscar
fl.Filter = "txt files (*.txt)|*.txt|Imagenes (*.jpg)|*.jpg|Archivos XML (*.xml)|*.xml"
' permite seleccionar más de un archivo
fl.Multiselect = True
' despliega el archivo de dialogo que facilita la búsqueda
fl.ShowDialog()
' carga la lista de nombres de archivos seleccionados
flName = fl.FileNames()
' si se selecciona más de un archivo se guardará en listbox
If flName.Length > 1 Then
' se carga la lista de los nombres de archivos seleccionados
For Each fn As String In flName
Me.ListBox1.Items.Add(fn)
Next
Me.TextBox1.Text = ""
Else
' se carga solo el nombre de archivo seleccionado
Me.TextBox1.Text = fl.FileName.ToString()
End If
f) Dentro del método mnuItemLimpiar_Click agregar:
Me.TextBox1.Text = ""
g) Dentro del método mnuItemColor_Click, recordar que atiende dos llamadas, la asociada al evento click del menú Color de Fondo y la otra al Menú de Color. Agregar la siguiente línea de comando:
' definir objeto color dialos
Dim cdColor As New ColorDialog
' definir menu item auxiliar
Dim mnuAux As MenuItem
' desplegar objeto color dialos
cdColor.ShowDialog()
' capturar el menú que esta haciendo la llamada
mnuAux = CType(sender, MenuItem)
' validar que se seleccione un color
If Not IsNothing(cdColor.Color) Then
' verificar el menú que esta llamando por su texto
If mnuAux.Text = "Color Letra" Then
TextBox1.ForeColor = cdColor.Color
ElseIf mnuAux.Text = "Color Fondo" Then
TextBox1.BackColor = cdColor.Color
End If
End If
De la misma forma, en ves de realizar las llamadas de los eventos mediante Handles, tambien se puede hacer a través de:
AddHanler mnuItem1.click, AddressOf mnuItem_Click.
Para ello se debe detallar en la parte final del evento load del formulario la siguiente línea:
AddHandler mnuItem1.Click, AddressOf mnuItemAbrir_click
Y llamar al método con la siguiente definición:
Public Sub mnuItemAbrir_click(ByVal sender As Object, ByVal e As EventArgs)
End Sub
No hay comentarios:
Publicar un comentario