Macro sustitucion

14/03/2006 - 21:50 por Juan Carlos Flores | Informe spam
necesito crear un procedimeinto que permita algo como al macro sustitucion.



' Codigo escrito en un form de una libreria de clases para se usado en
forms que heredados.
Sub ProcesoImpresion (ByVal GridaImprimir as String)

me. & GridaImprimir & .PrintPreview()

End Sub



me.ProcesoImpresion(GridaImprmir)
' Esto me mandaría a imprmir un grid el cual desconozco su nombre al
momento de crear el codigo en el form base.



Saludos



JCF

Preguntas similare

Leer las respuestas

#6 Juan Carlos Flores
16/03/2006 - 22:46 | Informe spam
Eduardo A. Morcillo [MS MVP VB] escribió:
No se el nombre del formulario, puede ser cualquiera activo. El
control no aparece usando ActiveMDIChild, solo aparecen los PEM's por
defecto del form.



Pero la coleccion Controls la puedes usar de todos modos.





Tus comentarios y mucha busqueda y lectura y pruebas me llevaron
desarrollar el siguiente codigo:

********************************************************
Private Sub BarBtnPrintPreview_ItemClick(ByVal sender As System.Object,
ByVal e As DevExpress.XtraBars.ItemClickEventArgs) Handles
BarBtnPrintPreview.ItemClick
If Me.MdiChildren.Length > 0 Then
Dim c As Control = Nothing
For Each ctrl As Control In Me.ActiveMdiChild.Controls
If UCase(ctrl.Name) = UCase("gridReporte") Then
c = ctrl
Exit For
End If
Next
If Not c Is Nothing Then
Dim MiGrid As DevExpress.XtraGrid.GridControl
MiGrid = c
MiGrid.ShowPrintPreview()
Else
MessageBox.Show("Nada que imprimir",
My.Application.Info.Title)
End If
Else
MessageBox.Show("No hay formularios abiertos", "AVISO!!")
End If
End Sub

***********************************

Eso me funciona.


Pero necesito por igual poder accesar a un metodo de los formularios (El
nombre del metodo es igual en todos).
He intentado con interfaces pero resulta que las interfaces solo las
puedo usar en un form no en mas de un form.

Este metodo se llamará igual en todos los forms sin embargo el codigo
contenido en él varia en cada formulario, nunca es igual. La idea de un
mismo nombre de metodo es precisamente para ejecutar el procedimeinto y
que haga lo que tenga que hacer en el form.

Aun no comprendo porque no hay macrosustitucion en .net o al menos
mandar parametros para ejecucion de metodos, algo asi como
me.ActiveMDIChild.RunFunction("NombreFuncion"), sería muy comodo.

Saludos.


JCF
Respuesta Responder a este mensaje
#7 Eduardo A. Morcillo [MS MVP VB]
17/03/2006 - 04:38 | Informe spam
Pero necesito por igual poder accesar a un metodo de los formularios
(El nombre del metodo es igual en todos).
He intentado con interfaces pero resulta que las interfaces solo las
puedo usar en un form no en mas de un form.



¿Como es esto de que no puedes usar la interface en mas de un form?

Aun no comprendo porque no hay macrosustitucion en .net o al menos
mandar parametros para ejecucion de metodos, algo asi como
me.ActiveMDIChild.RunFunction("NombreFuncion"), sería muy comodo.



En mi opinion la macrosustitucion no es una de las mejores opciones cuando
tienes un lenguaje totalmente orientado a objetos. Lo mas cerca que tienes a
la macrosustitucion es el late-binding (y/o Reflection), pero el problema
que tiene esto es que es mucho mas propenso a errores en tiempo de ejecucion
y es menos optimo porque deben resolverse las llamadas en tiempo de
ejecucion en lugar de hacer en la compilacion.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#8 Juan Carlos Flores
20/03/2006 - 20:41 | Informe spam
Eduardo A. Morcillo [MS MVP VB] escribió:
Pero necesito por igual poder accesar a un metodo de los formularios
(El nombre del metodo es igual en todos).
He intentado con interfaces pero resulta que las interfaces solo las
puedo usar en un form no en mas de un form.



¿Como es esto de que no puedes usar la interface en mas de un form?



Asi es... si declaro en un form

Public Interface IImprimir

Ya no puedo hacer lo mismo en otro porque me dice que la interface ya
esta declarada, entonces no me sirve porque debe de llamarse de la misma
manera en todos los forms.

He solucionado el asunto poniendo un boton invisible y en el evento
click le he puesto lo referente a imprimir. Este boton invisible
existirá en todos los forms que tengan la necesidad de imprmir.

Realmente una lastima, porque esa no es la mejor manera de solucionarlo,
pero aparte de tus comentarios, como puedes ver, el tema no lo toca
nadie, mucho menos ver codigo ejemplo, será porque no lo saben, no lo
usan o no desean compartirlo... no lo se.

Me da la impresion que todo mundo pone los botones en cada formulario y
se acabó el asunto, no usando una toolbar con generalidades.


Aun no comprendo porque no hay macrosustitucion en .net o al menos
mandar parametros para ejecucion de metodos, algo asi como
me.ActiveMDIChild.RunFunction("NombreFuncion"), sería muy comodo.



En mi opinion la macrosustitucion no es una de las mejores opciones cuando
tienes un lenguaje totalmente orientado a objetos. Lo mas cerca que tienes a
la macrosustitucion es el late-binding (y/o Reflection), pero el problema
que tiene esto es que es mucho mas propenso a errores en tiempo de ejecucion
y es menos optimo porque deben resolverse las llamadas en tiempo de
ejecucion en lugar de hacer en la compilacion.




De nuevo al problema LAte-Binding (Reflection) como se hace ?
DOnde hay ejemplos ? Alguien lo usa ?


Saludos Eduardo y muchas gracias por el tiempo dedicado a mi Persona


JCF
Respuesta Responder a este mensaje
#9 Jesús López
20/03/2006 - 21:34 | Informe spam
Pero puedes declarar el intefaz en un archivo de código fuente aparte,
pongamos que se llama Interfaces.vb donde tienes este código:

Public Interface IImprimir
Sub Imprimir()
End Interface

Luego todos los formularios que tengan la capacidad de imprimir, implementan
este interfaz:

Public Class Form1
Inherits Form
Implements IImprimir

Public Sub Imprimir() Implements IImprimir.Imprimir()

End Sub
End Class



Public Class Form2
Inherits Form
Implements IImprimir

Public Sub Imprimir() Implements IImprimir.Imprimir()

End Sub
End Class


Por último en el formulario principal:

Dim frm As form = Me.ActiveMdiChild
If frm Is IImprimir Then
DirectCast(frm, IImprimir).Imprimir()
End If

Saludos:

Jesús López
MVP



"Juan Carlos Flores" escribió en el
mensaje news:%
Eduardo A. Morcillo [MS MVP VB] escribió:
Pero necesito por igual poder accesar a un metodo de los formularios
(El nombre del metodo es igual en todos).
He intentado con interfaces pero resulta que las interfaces solo las
puedo usar en un form no en mas de un form.



¿Como es esto de que no puedes usar la interface en mas de un form?



Asi es... si declaro en un form

Public Interface IImprimir

Ya no puedo hacer lo mismo en otro porque me dice que la interface ya esta
declarada, entonces no me sirve porque debe de llamarse de la misma manera
en todos los forms.

He solucionado el asunto poniendo un boton invisible y en el evento click
le he puesto lo referente a imprimir. Este boton invisible existirá en
todos los forms que tengan la necesidad de imprmir.

Realmente una lastima, porque esa no es la mejor manera de solucionarlo,
pero aparte de tus comentarios, como puedes ver, el tema no lo toca nadie,
mucho menos ver codigo ejemplo, será porque no lo saben, no lo usan o no
desean compartirlo... no lo se.

Me da la impresion que todo mundo pone los botones en cada formulario y se
acabó el asunto, no usando una toolbar con generalidades.


Aun no comprendo porque no hay macrosustitucion en .net o al menos
mandar parametros para ejecucion de metodos, algo asi como
me.ActiveMDIChild.RunFunction("NombreFuncion"), sería muy comodo.



En mi opinion la macrosustitucion no es una de las mejores opciones
cuando tienes un lenguaje totalmente orientado a objetos. Lo mas cerca
que tienes a la macrosustitucion es el late-binding (y/o Reflection),
pero el problema que tiene esto es que es mucho mas propenso a errores en
tiempo de ejecucion y es menos optimo porque deben resolverse las
llamadas en tiempo de ejecucion en lugar de hacer en la compilacion.




De nuevo al problema LAte-Binding (Reflection) como se hace ?
DOnde hay ejemplos ? Alguien lo usa ?


Saludos Eduardo y muchas gracias por el tiempo dedicado a mi Persona


JCF
Respuesta Responder a este mensaje
#10 Jesús López
20/03/2006 - 21:39 | Informe spam
Por cierto, si no hemos participado antes es porque Eduardo lo estaba
haciendo muy bien. En mi caso no veía nada interesante que aportar aparte de
lo que decía Eduardo.

Saludos:

Jesús López
MVP
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida