Publicado en VB. NET, Visual Studio

VB .NET : Como deshabilitar la X del Formulario y bloquear el comando ALT+F4

disabledx

[ACTUALIZACION 02-09-2014]: se modifico el post y se uso el sourcecode para deplegar mejor el codigo.

Volviendo a los codigos y tutoriales, dejo este ejemplo de VB .NET para deshabilitar la X del formulario.

Y ademas, de yapa, el codigo para bloquear el cierre de la aplicacion con la combinacion de teclas ALT+F4

El formulario tendra 2 botones: uno para deshabilitar la X y otro para cerrar la aplicacion.

A continuacion el codigo.

Primero agregamos un Modulo al proyecto que tendra el sgte codigo:

Module Module1

Private Declare Function RemoveMenu Lib "user32" _(ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Long) As IntPtr

Private Declare Function GetSystemMenu Lib "user32" _(ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr

Private Declare Function GetMenuItemCount Lib "user32" _(ByVal hMenu As IntPtr) As Integer

Private Declare Function DrawMenuBar Lib "user32" _(ByVal hwnd As IntPtr) As Boolean

Private Const MF_BYPOSITION = &H400

Private Const MF_REMOVE = &H1000

Private Const MF_DISABLED = &H2

Public Sub DisableCloseButton(ByVal hwnd As IntPtr)

Dim hMenu As IntPtr

Dim menuItemCount As Integer

hMenu = GetSystemMenu(hwnd,False)

menuItemCount = GetMenuItemCount(hMenu)

 
Call RemoveMenu(hMenu, menuItemCount – 1, MF_DISABLED Or MF_BYPOSITION)

Call RemoveMenu(hMenu, menuItemCount – 2, MF_DISABLED Or MF_BYPOSITION)

Call DrawMenuBar(hwnd)

End Sub

End Module

En el formulario, agregamos el sgte codigo en el boton Disabled X

Private Sub btnDeshabilitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeshabilitar.Click

DisableCloseButton(Me.Handle)

End Sub

Y este codigo impide el cierre de con las teclas ALT+F4

Private Sub Form1_Unload(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

'impide la combinacion ALT+F4 para cerrar la aplicacion y cerrar el formulario con la X
e.Cancel = True

End Sub

Finalmente este seria el codigo del formulario completo:

Public Class Form1

Private Sub btnDeshabilitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDeshabilitar.Click
DisableCloseButton(Me.Handle)
End Sub

Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
Application.Exit()
End Sub

Private Sub Form1_Unload(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
'impide la combinacion ALT+F4 para cerrar la aplicacion y cerrar el formulario con la X
e.Cancel = True
End Sub

End Class

Este codigo fue probado con Visual Studio 2008.

TYDW.-

indice de empresas chilenas

15 comentarios sobre “VB .NET : Como deshabilitar la X del Formulario y bloquear el comando ALT+F4

  1. hola,

    he tratado de utilizar este codigo pero el numero de argumentos en las funciones es erroneo
    Call RemoveMenu(hMenu, menuItemCount – 1, MF_DISABLED Or MF_BYPOSITION)

    Call RemoveMenu(hMenu, menuItemCount – 2, MF_DISABLED Or MF_BYPOSITION)

    y… esta propiedad (hwnd) cómo la declaro?

    Gracias por su post

  2. gracias por el aporte, lo unico que yo necesitaba erta deshabilitar la x y utile su codigo asi:

    1) primero cree el modulo

    Module Module1

    Private Declare Function RemoveMenu Lib «user32» (ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Long) As IntPtr

    Private Declare Function GetSystemMenu Lib «user32» (ByVal hWnd As IntPtr, ByVal bRevert As Boolean) As IntPtr

    Private Declare Function GetMenuItemCount Lib «user32» (ByVal hMenu As IntPtr) As Integer

    Private Declare Function DrawMenuBar Lib «ser32» (ByVal hwnd As IntPtr) As Boolean

    Private Const MF_BYPOSITION = &H400

    Private Const MF_REMOVE = &H1000

    Private Const MF_DISABLED = &H2

    Public Sub DisableCloseButton(ByVal hwnd As IntPtr)

    Dim hMenu As IntPtr

    Dim menuItemCount As Integer

    hMenu = GetSystemMenu(hwnd, False)

    menuItemCount = GetMenuItemCount(hMenu)

    Call RemoveMenu(hMenu, menuItemCount – 1, MF_DISABLED Or MF_BYPOSITION)

    Call RemoveMenu(hMenu, menuItemCount – 2, MF_DISABLED Or MF_BYPOSITION)

    End Sub

    End Module

    2)y la funcion la llame en el evento load del formulario

    Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    DisableCloseButton(Me.Handle)

    End Sub

    Asi me funciona perfectamente

  3. Hago exactamente como lo explican pero me aparece error en :
    Call RemoveMenu(hMenu, menuItemCount – 1, MF_DISABLED Or MF_BYPOSITION)

    Call RemoveMenu(hMenu, menuItemCount – 2, MF_DISABLED Or MF_BYPOSITION)

    estos son los errores:
    Error 1 Demasiados argumentos para ‘Declare Ansi Function RemoveMenu Lib «user32″ (ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Long) As IntPtr»() As Object’. C:\Documents and Settings\Nestor Duarte\Mis documentos\Visual Studio 2008\Projects\WindowsApplication1\WindowsApplication1\Module1.vb 28 25 WindowsApplication1

    Error 2 El carácter no es válido. C:\Documents and Settings\Nestor Duarte\Mis documentos\Visual Studio 2008\Projects\WindowsApplication1\WindowsApplication1\Module1.vb 30 46 WindowsApplication1

    por favor necesito q

  4. hice todo los pasos tal cual como lo explican ustedes y aparecen errores.

    Error 1 Demasiados argumentos para ‘Declare Ansi Function RemoveMenu Lib «user32″ (ByVal hMenu As IntPtr, ByVal nPosition As Integer, ByVal wFlags As Long) As IntPtr»() As Object’. C:\Documents and Settings\Nestor Duarte\Mis documentos\Visual Studio 2008\Projects\WindowsApplication1\WindowsApplication1\Module1.vb 28 25 WindowsApplication1

    Error 2 El carácter no es válido. C:\Documents and Settings\Nestor Duarte\Mis documentos\Visual Studio 2008\Projects\WindowsApplication1\WindowsApplication1\Module1.vb 28 46 WindowsApplication1

    el error 2 es un caracter ( – 1, -2 ) q salen en el lo los siguiente:

    Call RemoveMenu(hMenu, menuItemCount – 1, MF_DISABLED Or MF_BYPOSITION)

    Call RemoveMenu(hMenu, menuItemCount – 2, MF_DISABLED Or MF_BYPOSITION)

    Call DrawMenuBar(hwnd)

    por favor necesito q me ayuden urgente!!!
    se los agradeceria!!

  5. Creo que hay que revisar antes la version del Visual Studio, ya que este ejemplo creo que lo realice con VS 2008.

    Atento a sus comentarios.

  6. Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

    e.Cancel = True

    End Sub

    otra opcion, en lugar de deshabilitar el boton, simplemente se cancela el cerrado del formulario.

  7. el código funciona perfecto, el problema es que estan copiando y pegando, yo borre el signo menos y lo escribi, y solucione el problema

  8. EL PROBLEMA ES QUE TIENE QUE QUITAR LAS COMILLAS EN LA DECLARACIONES A LA LIBRERIAS PARA QUE EL VB LO GENERE COMO DEBE DE SER, RESUMEN LA PROGRAMACION DEBE DE QUEDAR CON LOS COLORES QUE MUESTRA EL EJEMPLO

Replica a ivansinho Cancelar la respuesta