none
Evitar el minimizado de un formulario RRS feed

  • Pregunta

  • Saludos a todos y gracias de antemano por su aportacion.

    Deseo desarrollar un formulario el cual me sirva para presentar informacion a clientes como su adeudo con la empresa y datos generales, pero deseo evitar que se pueda utilizar el equipo de computo para otras actividades mientras este corriendo este software que estoy desarrollando.

    Entonces quiziera impedir que el formulario se pueda minimizar y cerrar mediante combinacion de teclas, por ejemplo que al presionar "boton ventana + d" se cancele el minimizado y el formulario siga al frente y ejecucion, de igual manera con "Alt + F4" para cerrarlo.

    Cabe aclarar tambien que ya tengo en las propiedades del formulario el border style en none para quitar automaticamente los botones de Minimizar, Restaurar y Cerrar del mismo asi como el window state en maximized para que se muestre en toda la pantalla, pero eso no evita el minimizado del formulario presionando desde el teclado el "Boton de Inicio + d".

    Nuevamente, agradezco de antemano las aportaciones recibidas.

    Saludos


    Mil gracias por tu aportación, Saludos

    jueves, 15 de enero de 2015 21:48

Respuestas

  • Hola:

    Para el cerrado del form, en el evento FORM_CLOSING(), consultando la propiedad e.CloseReason y poniendo e.Cancel = True cuando te interese.

    Para evitar el minimizado, existen varias formas (controlar el evento Resize, las propiedades MINIMUMSIZE/MAXIMUMSIZE), puedes escoger la que mas te interese.

    Para evitar la pulsación de WIN+D, puedes usar la propiedad .TOPMOST. En verdad, WIN+D no minimiza el formulario, sino que muestra el escritorio de Windows.

    Todo en un ejemplo sencillo:

    ' Creas un un Formulario con un botón llamado btnSalir ' que será la única forma de cerrar el formulario. Dim bPermitirCerrar As Boolean = False Private Sub btnSalir(ByVal sender As Object, ByVal e As EventArgs) Handles btnSalir.Click bPermitirCerrar = True Me.Close() End Sub Private Sub frm_Load(sender As Object, e As System.EventArgs) Handles Me.Load Me.TopMost = True ' Siempre visible, evita el WIN+D End Sub Private Sub frm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Aquí puedes controlar e.CloseReason para ' saber como se está intentando cerrar el formulario e.Cancel = Not bPermitirCerrar End Sub Private Sub frm_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize

    WindowState = FormWindowState.Maximized

    ' Siempre maximizado

    End Sub


    Espero que te sirva.


    viernes, 16 de enero de 2015 10:08

Todas las respuestas

  • Yo lo veo difícil (=imposible). Llamalo ignorancia. Pero no creo que puedas.

    Como yo lo veo, la opción que tienes es ejecutar tu programa sobre su propio escritorio (sin explorer/shell, nada). Cuando tu programa acaba, vuelves al desktop por defecto. 

    Crear un desktop en donde ejecutar la aplicación y hacer el intercambio es relativamente simple y conlleva muy poco código.

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms687098%28v=vs.85%29.aspx

    viernes, 16 de enero de 2015 1:19
  • Hola:

    Para el cerrado del form, en el evento FORM_CLOSING(), consultando la propiedad e.CloseReason y poniendo e.Cancel = True cuando te interese.

    Para evitar el minimizado, existen varias formas (controlar el evento Resize, las propiedades MINIMUMSIZE/MAXIMUMSIZE), puedes escoger la que mas te interese.

    Para evitar la pulsación de WIN+D, puedes usar la propiedad .TOPMOST. En verdad, WIN+D no minimiza el formulario, sino que muestra el escritorio de Windows.

    Todo en un ejemplo sencillo:

    ' Creas un un Formulario con un botón llamado btnSalir ' que será la única forma de cerrar el formulario. Dim bPermitirCerrar As Boolean = False Private Sub btnSalir(ByVal sender As Object, ByVal e As EventArgs) Handles btnSalir.Click bPermitirCerrar = True Me.Close() End Sub Private Sub frm_Load(sender As Object, e As System.EventArgs) Handles Me.Load Me.TopMost = True ' Siempre visible, evita el WIN+D End Sub Private Sub frm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing ' Aquí puedes controlar e.CloseReason para ' saber como se está intentando cerrar el formulario e.Cancel = Not bPermitirCerrar End Sub Private Sub frm_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize

    WindowState = FormWindowState.Maximized

    ' Siempre maximizado

    End Sub


    Espero que te sirva.


    viernes, 16 de enero de 2015 10:08
  • Mil gracias por tu aportacion y por supuesto que me es de mucha utilidad.

    Saludos.


    Mil gracias por tu aportación, Saludos

    lunes, 19 de enero de 2015 19:11
  • Muchas gracias por tu aportacion, no habia pensado en la opcion de crear un desktop propio y es mas ni siquiera sabia que lo podia hacer, pero gracias a tu comentario estoy investigando para tenerlo como alternativa.

    Saludos.


    Mil gracias por tu aportación, Saludos

    lunes, 19 de enero de 2015 19:15
  • Hola Julio,

    Estoy de acuerdo con Miguel que lo que requieres es complicado hacer o simplemente no se puede. Si tu objetivo es como mencionas "...pero deseo evitar que se pueda utilizar el equipo de computo para otras actividades mientras este corriendo este software que estoy desarrollando.", lo veo complicado.

    Y ¿qué pasa si ejecuto una aplicación con el cuadro Ejecutar [Windows + R]

    Y ¿qué pasa si abro el explorador de windows con [Windows + E] y abro otra aplicación?

    Y si estoy en windows 8 ¿qué pasa si ejecuto [Windows + Q]?

    ¿Y si presiono las teclas [Ctrl + Shift + Escape] ingreso al administrador de tareas y finalizo tu aplicación?

    Y así tendrás varios Y..? Y...? Y...? Te sugiero lo medites, creo que no es la forma correcta de hacerlo sobretodo si estas en un sistema operativo donde una de las principales características es el multitask.

    lunes, 19 de enero de 2015 19:22
  • Hola:

    Cualquier combinación de [Windows + <tecla>] está 'bloqueada' por el .TopMost = True y estar siempre Maximizado. Si además quieres asegurarte que tu aplicación tiene siempre el foco:

        Private Sub frm_Volver(sender As Object, e As System.EventArgs) Handles Me.Deactivate, Me.LostFocus
            Me.Activate
        End Sub

    Si abres el administrador de tareas y finalizas la aplicación, se ejecuta el código con .CloseReason = TaskManagerClosing

    Private Sub frm_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If e.CloseReason = CloseReason.TaskManagerClosing Then ' Aquí decides que quieres hacer si el usuario ' intenta cerrar la aplicación a lo bruto.

    ' Yo guardaría todo el trabajo y además un flag para ' darle un 'toque' de atención la próxima vez que use la App ;-)

    Else e.Cancel = Not bPermitirCerrar End If End Sub

    Posiblemente la opcion del escritorio sea mas ortodoxa, pero con pocas lineas de codigo se puede conseguir una aproximación mas que razonable.

    Saludos



    • Editado LG DES martes, 20 de enero de 2015 11:08
    martes, 20 de enero de 2015 10:59
  • Hola,

    Y para ello ¿no es mejor crear una sesión de usuario donde tenga restringido todo lo que no se requiere que haga el usuario a través de políticas del sistema operativo? o ¿quizá a través de AD?.

    martes, 20 de enero de 2015 14:50