hola a todos, pues la cuestion es que le he quitado el boton cerrar a un formulario porque kiero que la accion se realice especificamente cuando se presiona la tecla ESC; la parte de quitar el boton no tuvo problem, ya alguien habia tenido la misma curiosidad que yo, mi problema es que las formas clasicas de cerrar el formulario al preguntar por la tecla que se oprime no me quieren funcionar.
alguien me puede ayudar con esto ??
aki esta el codigo de mi formulario, lease echenle una ojeada y diganme donde esta el errorx
Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.DisableCloseButton(this.Handle.ToInt32());
}
//Declaración de constantes necesarias (valores en hexadecimal)
private const int MF_BYPOSITION = 0x400;
private const int MF_REMOVE = 0x1000;
private const int MF_DISABLED = 0x2;
//Importación de procedimientos externos almacenados
//en la librería de Windows USER32.DLL
//Quitar elementos del menú de sistema
[DllImport("user32.Dll")]
public static extern IntPtr RemoveMenu(int hMenu, int nPosition, long wFlags);
//Obtener el menú de sistema
[DllImport("User32.Dll")]
public static extern IntPtr GetSystemMenu(int hWnd, bool bRevert);
//Obtener el número de elementos del menú de sistema
[DllImport("User32.Dll")]
public static extern IntPtr GetMenuItemCount(int hMenu);
//Redibujar la barra de título de la ventana
[DllImport("User32.Dll")]
public static extern IntPtr DrawMenuBar(int hwnd);
//Método que desactiva el botón X (cerrar)
public void DisableCloseButton(int hWnd)
{
IntPtr hMenu;
IntPtr menuItemCount;
//Obtener el manejador del menú de sistema del formulario
hMenu = GetSystemMenu(hWnd, false);
//Obtener la cuenta de los ítems del menú de sistema.
//Es el menú que aparece al pulsar sobre el icono a la izquierda
//de la Barra de título de la ventana, consta de los ítems: Restaurar, Mover,
//Tamaño,Minimizar, Maximizar, Separador, Cerrar
menuItemCount = GetMenuItemCount(hMenu.ToInt32());
//Quitar el ítem Close (Cerrar), que es el último de ese menú
RemoveMenu(hMenu.ToInt32(), menuItemCount.ToInt32() - 1, MF_DISABLED | MF_BYPOSITION);
//Quitar el ítem Separador, el penúltimo de ese menú, entre Maximizar y Cerrar
RemoveMenu(hMenu.ToInt32(), menuItemCount.ToInt32() - 2, MF_DISABLED | MF_BYPOSITION);
//Redibujar la barra de menú
DrawMenuBar(hWnd);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.Cancel)
{
DialogResult dialog = MessageBox.Show("Se perderán los datos que no han sido salvados.\n Desea Salir?", "EXIT", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialog == DialogResult.Yes)
Application.Exit();
}
}
}
}