Formulario invisible

10/03/2009 - 11:43 por A Trujillo | Informe spam
Hola grupo,

En Visual Studio 2008 Express, tengo una aplicación Windows que consta de un
formulario que se muestra (se mantiene en memoria solo unos pocos segundos,
con un timer) solo si satisface ciertas condiciones.

Estos pocos segundos que se mantiene en memoria no deseo que sea visible, y
he estado usando el siguiente método por su simpleza:

// Globally accessible
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

//Hide (FormLoad)
ShowWindow(this.Handle, 0);

Pero no me gusta porque parpadea un poco al momento de efectuarse la
invisibilidad, ¿Podéis sugerirme otra solución?

Muchas gracias de antemano,
Alberto

Preguntas similare

Leer las respuestas

#6 A Trujillo
11/03/2009 - 22:32 | Informe spam
Hola de nuevo xcal,
Disculpa, no te había entendido. Sí, va perfectamente, y para mi objetivo
cubre mis necesidades 100%.
Gracias por tu ayuda,
Un atento saludo,
Alberto
"xcal" <d22> wrote in message news:

hola Alberto, asi me quedó

public class Form1 : Form
{
MyForm form = new MyForm();

void Button1Click(object sender, EventArgs e)
{
form.Show();
}

void Button2Click(object sender, EventArgs e)
{
form.Hide();
}
}

public class MyForm:Form
{
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
}
}

}

saludos
Carlos.

"A Trujillo" escribió en el mensaje
news:
Hola xcal,
Muchas gracias por contestar. Estuve intentando como sugieres.
Quizá el modo como lo hice no fue el correcto: puse el MyForm.Hide()
dentro del MyForm_Load, pero se mostraba el form por una fracción de
segundo, y no me gustaba el efecto.
Muchas gracias por tu tiempo, un atento saludo,
Alberto
"xcal" <d22> wrote in message
news:

Acabe de usar MyForm.Show() MyForm.Hide()
y MyForm hereda de Form limpiando el metodo onpaint con override onpaint
de Form
eso podria ayudarte

saludos, Carlos

"A Trujillo" escribió en el
mensaje news:
Hola grupo,

En Visual Studio 2008 Express, tengo una aplicación Windows que consta
de un
formulario que se muestra (se mantiene en memoria solo unos pocos
segundos,
con un timer) solo si satisface ciertas condiciones.

Estos pocos segundos que se mantiene en memoria no deseo que sea
visible, y
he estado usando el siguiente método por su simpleza:

// Globally accessible
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

//Hide (FormLoad)
ShowWindow(this.Handle, 0);

Pero no me gusta porque parpadea un poco al momento de efectuarse la
invisibilidad, ¿Podéis sugerirme otra solución?

Muchas gracias de antemano,
Alberto












Respuesta Responder a este mensaje
#7 A Trujillo
11/03/2009 - 22:44 | Informe spam
Hola de nuevo Alberto,
Aunque el compañero xcal me ha dado una solución viable, tengo interés en
implementar lo que me dices, porque me gusta la idea para usarla en la parte
de mi aplicación que no requiere que se muestre ningún formulario y porque
el 99% de los casos eso es todo lo que va a hacer.
Pero me ha surgido el siguiente problema: he creado mi clase con todas las
funciones que necesito. En el punto de entrada al programa (función Main)
instacio la clase. Pero al ejecutarse se abre y cierra una ventana consola.
¿Qué necesito hacer para que no aparezca dicha consola?
"Alberto Poblacion" wrote
in message news:
"A Trujillo" wrote in message
news:
[...] un formulario que se muestra [...]
solo si satisface ciertas condiciones.

Estos pocos segundos que se mantiene en memoria no deseo que sea visible,
y
[...]
Pero no me gusta porque parpadea un poco al momento de efectuarse la
invisibilidad, ¿Podéis sugerirme otra solución?



¿Por qué no te limitas a hacer el "new" del formulario para crearlo, sin
llamar en ningún momento al "Show", y de esa manera nunca llegará a verse?
Es más, si nunca quieres que se vea, podrías hacer una simple Clase
normal y corriente, sin necesidad de que herede de "Form". ¿Por qué estás
usando un formulario, si no tiene que verse?

Respuesta Responder a este mensaje
#8 Alberto Poblacion
12/03/2009 - 14:35 | Informe spam
"A Trujillo" wrote in message
news:
[...] En el punto de entrada al programa (función Main) instacio la clase.
Pero al ejecutarse se abre y cierra una ventana consola. ¿Qué necesito
hacer para que no aparezca dicha consola?



No puede ser. Alguno extraño tienes que estar haciendo con la clase. Si
declaras una clase así:

class MiClase
{
//Aqui las funciones
}

Y luego la instancias así:

MiClase laInstancia = new MiClase();

no se verá absolutamente nada en ningún sitio. Si te aparece una ventana
de consola es que estás haciendo alguna otra cosa por alguna otra parte para
que salga esa consola.

Por cierto, si sólo quieres usar la clase para contener métodos, no
merece la pena instanciarla. Es preferible hacer que los métodos sean
estáticos, e invocarlos directamente poniendo el nombre de la clase:

static class MiClase
{
internal static void MiMetodo() { ... }
}

y luego para llamarlo:
MiClase.MiMetodo();
Respuesta Responder a este mensaje
#9 A Trujillo
12/03/2009 - 22:19 | Informe spam
Hola otra vez,
Así es como lo tengo. Creo que la razon es que hago referencia a
System.Windows.Forms porque uso el clipboard, la ruta de la aplicacion y
muestro un cuadro de dialogo.
¿Puede ser esa la razon?
"Alberto Poblacion" wrote
in message news:
"A Trujillo" wrote in message
news:
[...] En el punto de entrada al programa (función Main) instacio la
clase. Pero al ejecutarse se abre y cierra una ventana consola. ¿Qué
necesito hacer para que no aparezca dicha consola?



No puede ser. Alguno extraño tienes que estar haciendo con la clase. Si
declaras una clase así:

class MiClase
{
//Aqui las funciones
}

Y luego la instancias así:

MiClase laInstancia = new MiClase();

no se verá absolutamente nada en ningún sitio. Si te aparece una
ventana de consola es que estás haciendo alguna otra cosa por alguna otra
parte para que salga esa consola.

Por cierto, si sólo quieres usar la clase para contener métodos, no
merece la pena instanciarla. Es preferible hacer que los métodos sean
estáticos, e invocarlos directamente poniendo el nombre de la clase:

static class MiClase
{
internal static void MiMetodo() { ... }
}

y luego para llamarlo:
MiClase.MiMetodo();


Respuesta Responder a este mensaje
#10 Alberto Poblacion
12/03/2009 - 23:05 | Informe spam
"A Trujillo" wrote in message
news:%
Así es como lo tengo. Creo que la razon es que hago referencia a
System.Windows.Forms porque uso el clipboard, la ruta de la aplicacion y
muestro un cuadro de dialogo.
¿Puede ser esa la razon?



No. Las referencias nunca hacen aparecer nada. Puedes poner una
referencia a System.Windows.Forms y además si te apetece otra a
System.Web.UI, y ninguna de las dos ocasiona ni que te salgan forms ni que
te salgan páginas web. Mientras no hagas una llamada a algo que esté dentro
de una de esas DLLs a las que tienes referencias, el mero hecho de que las
referencias existan no provoca que el programa realice ningúna acción de
ningún tipo.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida