se puede usar un PrintPreviewControl en una clase?

12/05/2010 - 01:38 por edcha | Informe spam
El asunto es que intento hacer un dll que me sirva para imprimir, todo
lo tengo pero el asunto es el siguiente:

Se puede usar solo el PrintPreviewControl dentro del Dll y despues
pasarlo a un PrintPreviewControl que este en el formulario que he
formateado para que sustituya el printpreviewdialog.

Gracias por la ayuda

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
12/05/2010 - 07:33 | Informe spam
"edcha" wrote in message
news:
El asunto es que intento hacer un dll que me sirva para imprimir, todo
lo tengo pero el asunto es el siguiente:

Se puede usar solo el PrintPreviewControl dentro del Dll y despues
pasarlo a un PrintPreviewControl que este en el formulario que he
formateado para que sustituya el printpreviewdialog.



Sí, de hecho el PrintPreviewControl *siempre* se usa dentro de una
clase. Normalmente esa clase hereda de Control, o de Form (que a su vez
hereda de Control) y lo que se hace es añadirlo a la coleción Controls de la
clase contenedora (aunque tú no hagas esto, lo hace por tí el diseñador de
Visual Studio y escribe el código correspondiente en el archivo
.designer.cs). Pero no hace falta que ese código se encuentre forzosamente
en la clase que va a contener el PrintPreviewControl. Puedes perfectamente
desde un formulario llamar a una DLL y pasarle como parámetro el "this" para
que la clase que hay en la DLL tenga una referencia al formulario. A
continuación, la clase de la DLL puede hacer un "new" del
PrintPreviewControl, configurar sus propiedades, y añadírselo a la colección
Controls del formulario que se recibió como parámetro.
Si el formulario siempre va a ser el mismo, también puedes dejarlo
metido dentro de la DLL. Basta con que copies al proyecto de la DLL los
fuentes enteros del formulario. Haciéndolo asi, no necesitas pasárselo como
argumento, sino que puede contener ya directamente el PrintPreviewControl
introducido en tiempo de diseño.
Respuesta Responder a este mensaje
#2 edcha
13/05/2010 - 04:34 | Informe spam
Muchas gracias Alberto por tu ayuda.

Entiendo lo de pasarle el form que tengo como parámetro al DLL pero
como mi conocimiento es básico me quedo corto con la explicación.
seria posible que me pongas un pequeño ejemplo o si tienes alguno
enviármelo a mi correo

El asunto es que por mas que busco un ejemplo no lo encuentro lo he
buscado en CodeProject y en otros lugares pero nada y veo que tu
entiendes mi punto

Muchas gracias.
Respuesta Responder a este mensaje
#3 Alberto Poblacion
13/05/2010 - 08:58 | Informe spam
"edcha" wrote in message
news:
Entiendo lo de pasarle el form que tengo como parámetro al DLL pero
como mi conocimiento es básico me quedo corto con la explicación.
seria posible que me pongas un pequeño ejemplo



Ejemplo:

Este es el código del formulario en el que queremos añadir el
PrintPreviewControl:

public class Form1 : Form
{
...
private void CargarElControl()
{
MiClase c = new MiClase();
c.Cargar(this);
}
}


Y esta es la clase que hay en la DLL:

public class MiClase
{
...
public void Cargar(Form f)
{
PrintPreviewControl ctl = new PrintPreviewControl();
//Configurar las propiedades de ctl, por ejemplo:
ctl.Columns=2; //Mostrar dos páginas
...
//Hacer el control visible en el formulario
f.Controls.Add(ctl);
}
}

Por supuesto, se puede hacer de muchas otras formas. Por ejemplo, puedes
hacer que la DLL devuelva el PrintPreviewControl ya configurado y que sea la
rutina del formulario principal la que lo agrega en el sitio adecuado. De
hecho, este método sería probablemente más elegante ya que permite al
formulario ubicar el control donde quiera, sin introducir dependencias desde
la DLL hacia el formulario.
Respuesta Responder a este mensaje
#4 edcha
14/05/2010 - 05:23 | Informe spam
Gracias de nuevo Alberto por tu gentil ayuda y por el ejemplo.

Bien ya voy entendiendo el asunto pero solo tengo una duda mas.

Actualmente tengo dentro del Dll (y es lo que no quiero) un formulario
con los respectivos botones para zoom, imprimir etc y el
PrintPreviewControl ademas dentro del DLL tengo una clase que crea un
objeto Document y todo bien.
Pero desde un form externo tengo que crear el Document y con este
habilitar el DLL para que presente el document creado y solo lo puedo
mostrar al final mostrando el form que esta dentro del DLL con
"NewPrintPreview.Show();" como si fuera un PrintPreviewDialog que
seria algo así "printPreviewDialog1.Show()" como vez no es muy
diferente a usar un PrintPreviewDialog.

Pero ahora lo que persigo es algo diferente, dentro del DLL tengo la
clase que crea el objeto Document y en un formulario externo tengo los
botones para zoom, imprimir etc y el PrintPreviewControl, entonces
después de crear el Document hacer que el PrintPreviewControl lo
presente pero este no tiene ningún método ".Show();" y aunque le paso
el document creado no lo puedo mostrar.

Bien espero que entre tanta explicación no te haya enredado y
nuevamente te agradeceré cualquier ayuda.

Saludos.
Respuesta Responder a este mensaje
#5 Alberto Poblacion
14/05/2010 - 10:03 | Informe spam
"edcha" wrote in message
news:
[...]
Pero ahora lo que persigo es algo diferente, dentro del DLL tengo la
clase que crea el objeto Document y en un formulario externo tengo los
botones para zoom, imprimir etc y el PrintPreviewControl, entonces
después de crear el Document hacer que el PrintPreviewControl lo
presente pero este no tiene ningún método ".Show();" y aunque le paso
el document creado no lo puedo mostrar.



Debería funcionar sin problemas. Si en el formulario externo tienes ya
todos los botones y el PrintPreviewControl, lo único que necesitas es que la
DLL que crea el PrintDocument te lo devuelva, se lo asignas a la propiedad
Document del PrintPreviewControl, y haces un .Show() del formulario que
contiene el PrintPreviewControl. Con eso tiene que funcionar.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida