Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Recorrer controles de formulario - No diferencia entre ToolStrip y MenuStrip

52 views
Skip to first unread message

Jamaf

unread,
Jan 23, 2008, 8:17:34 PM1/23/08
to ateix...@hotmail.com
Amigos
Necesito recorrer todos los controles de un formulario (incluso de
contenedores) para ubicar unos controles especificos.
El problema esta en que cuando trato de recorre un MenuStrip ingresa
al bucle EACH del ToolStrip provocando el siguiente error: Nro.
Error(13) - No se puede convertir un objeto de tipo
'System.Windows.Forms.ToolStripMenuItem' al tipo
'System.Windows.Forms.ToolStripButton'.

Aqui les pego el codigo para que chequeen que estoy haciendo mal, de
antemano muchas gracias por la ayuda.


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
RecorrerControles(Me)
End Sub

Public Sub RecorrerControles(ByVal oContenedor As Object)
Dim oCtr As Control
Try
For Each oCtr In oContenedor.Controls
If TypeOf oCtr Is FlowLayoutPanel Or TypeOf oCtr Is GroupBox
Or TypeOf oCtr Is Panel _
Or TypeOf oCtr Is SplitContainer Or TypeOf oCtr Is TabControl
_
Or TypeOf oCtr Is TableLayoutPanel Then
MsgBox(oCtr.Name)
RecorrerControles(oCtr)
End If
If TypeOf oCtr Is ToolStrip Then
RecorreToolStrip(oCtr)
End If
If TypeOf oCtr Is MenuStrip Then
RecorrerMenu(oCtr)
End If
If TypeOf oCtr Is ContextMenuStrip Then
RecorrerMenuContextual(oCtr)
End If
Next
Catch ex As Exception
Throw New System.Exception(System.String.Concat("Nro. Error(",
Err.Number.ToString, ") - ", ex.Message, vbCrLf, ex.StackTrace,
vbCrLf))
End Try
End Sub

Public Sub RecorreToolStrip(ByRef pToolStrip As
Windows.Forms.ToolStrip)
Dim oToolStripButton As Windows.Forms.ToolStripButton
Try
For Each oToolStripButton In pToolStrip.Items
MsgBox(oToolStripButton.Text)
Next

Catch ex As Exception
Throw New System.Exception(System.String.Concat("Nro. Error(",
Err.Number.ToString, ") - ", ex.Message, vbCrLf, ex.StackTrace,
vbCrLf))
Finally
oToolStripButton = Nothing : GC.Collect()
End Try
End Sub

Public Sub RecorrerMenuContextual(ByRef pMenu As ContextMenuStrip)
Dim oToolStripMenuItem As ToolStripMenuItem
Try
For Each oToolStripMenuItem In pMenu.Items
If oToolStripMenuItem.DropDownItems.Count > 0 Then
MsgBox(oToolStripMenuItem.Text)
RecorrerSubmenu(oToolStripMenuItem.DropDownItems)
Else
MsgBox(oToolStripMenuItem.Text)
End If
Next

Catch ex As Exception
Throw New System.Exception(System.String.Concat("Nro. Error(",
Err.Number.ToString, ") - ", ex.Message, vbCrLf, ex.StackTrace,
vbCrLf))
Finally
oToolStripMenuItem = Nothing : GC.Collect()
End Try
End Sub

Public Sub RecorrerMenu(ByRef pMenu As MenuStrip)
Dim oToolStripMenuItem As ToolStripMenuItem
Try
For Each oToolStripMenuItem In pMenu.Items
If oToolStripMenuItem.DropDownItems.Count > 0 Then
MsgBox(oToolStripMenuItem.Text)
RecorrerSubmenu(oToolStripMenuItem.DropDownItems)
Else
MsgBox(oToolStripMenuItem.Text)
End If
Next

Catch ex As Exception
Throw New System.Exception(System.String.Concat("Nro. Error(",
Err.Number.ToString, ") - ", ex.Message, vbCrLf, ex.StackTrace,
vbCrLf))
Finally
oToolStripMenuItem = Nothing : GC.Collect()
End Try
End Sub

Private Sub RecorrerSubmenu(ByVal oSubmenuItems As
Windows.Forms.ToolStripItemCollection)
Dim oToolStripItem As Windows.Forms.ToolStripItem

Try
For Each oToolStripItem In oSubmenuItems
If oToolStripItem.GetType Is
GetType(Windows.Forms.ToolStripMenuItem) Then
If CType(oToolStripItem,
Windows.Forms.ToolStripMenuItem).DropDownItems.Count > 0 Then
MsgBox(oToolStripItem.Text)
RecorrerSubmenu(CType(oToolStripItem,
Windows.Forms.ToolStripMenuItem).DropDownItems)
Else
MsgBox(oToolStripItem.Text)
End If
End If
Next

Catch ex As Exception
Throw New System.Exception(System.String.Concat("Nro. Error(",
Err.Number.ToString, ") - ", ex.Message, vbCrLf, ex.StackTrace,
vbCrLf))
Finally
oToolStripItem = Nothing : GC.Collect()
End Try
End Sub

Aldo Teixeira
Lima - Perú

Alberto Poblacion

unread,
Jan 24, 2008, 1:55:27 AM1/24/08
to
> "Jamaf" <ateix...@hotmail.com> wrote in message
> news:ede08955-c2fb-453d...@s13g2000prd.googlegroups.com...

> Error(13) - No se puede convertir un objeto de tipo
> 'System.Windows.Forms.ToolStripMenuItem' al tipo
> 'System.Windows.Forms.ToolStripButton'.
> [...]

> If TypeOf oCtr Is ToolStrip Then
> RecorreToolStrip(oCtr)
> End If
> If TypeOf oCtr Is MenuStrip Then
> RecorrerMenu(oCtr)
> End If

El problema es que la clase MenuStrip hereda de ToolStrip. Por lo tanto,
cada vez que el bucle encuentra un MenuStrip se mete por el primer "If" en
lugar de por el segundo, y le aplica el RecorreToolStrip en lugar del
RecorrerMenu. Dentro de la lógica de la primera de estas funciones, por lo
tanto, te van a llegar datos distintos de los que esperabas, y te está
fallando alguno del los "casts".

0 new messages