C# winfrom中如何隐藏标题栏中的 关闭按钮图标?

程序中需要把关闭按钮图标给隐藏了 只留下最大化 和 最小化 哪位大侠帮小弟解决一下这个问题 感谢不尽 谢谢!!!

关闭按钮无法删除,但是可以禁用,方法如下:

首先在你的窗体类中引入一些Windows API需要的定义

const uint SC_CLOSE = 0xf060;
const uint MF_GRAYED = 0x01;
const uint MF_BYCOMMAND = 0x0;
[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem,
uint uEnable);
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
static extern bool RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);

然后可以在窗体的Load事件中加入下列初始化代码

IntPtr hSysMenu;
hSysMenu = GetSystemMenu(this.Handle, false);
EnableMenuItem(hSysMenu, SC_CLOSE, MF_GRAYED);
RemoveMenu(hSysMenu, SC_CLOSE, MF_BYCOMMAND);

这样就可以将关闭按钮置灰,并且将左上角点击弹出的系统菜单中的关闭菜单去掉。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-22
双击Form_Closing事件,然后直接写以下代码,使得窗体无法关闭:private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
} C#中可没有直接屏蔽关闭按钮的方法,你硬要这样也可以:[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int GetMenuItemCount(IntPtr hMenu);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool DrawMenuBar(IntPtr hWnd);
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);

protected override void OnLoad(EventArgs e)
{
base.OnLoad (e);

const Int32 MF_BYPOSITION = 0x400;
const Int32 MF_REMOVE = 0x1000;

IntPtr menu = GetSystemMenu(this.Handle, false);
int menuCount = GetMenuItemCount(menu);
if (menuCount > 1)
{
//删除菜单的「关闭」和分隔符
RemoveMenu(menu, (uint) (menuCount - 1), MF_BYPOSITION | MF_REMOVE);
RemoveMenu(menu, (uint) (menuCount - 2), MF_BYPOSITION | MF_REMOVE);
DrawMenuBar(this.Handle);
}
第2个回答  2013-04-22
C#的Windows窗体中的标题栏中有几个小项,从左向右依次应该是图标,标题名,最小化按钮,最大化按钮,还有一个就是关闭按钮。其中前面的图标,标题名都应该知道怎么改(针对专业人士,呵呵),最小化按钮和最大化按钮也都应该知道怎么显示和隐藏,至于关闭按钮可能以前没有注意到。今天自己做的时候不知道怎么让关闭按钮隐藏,就上网查了一下。结果和大家分享一下。
要只让关闭按钮隐藏好像是没有办法的,说好像是因为有一位同仁说“如果只是想不要关闭按钮是不可能的...不过可以要它变灰不可用...”又有一位同仁说了很长一段代码,我也没有验证,不知道是不是真的可以只让关闭按钮隐藏。下面说一下几个不是只是让关闭按钮隐藏但是可以达到类似效果的方法:
1.将ControlBox属性设为False。这种方法是让标题栏中的除了标题名以外的其他的全部隐藏,也就是把图标,最小化、最大化和关闭按钮全部隐藏。
2.让关闭按钮失效,方法是在事件里面找到FormCloseing事件,编辑该事件,在里面写上一条语句“e.Cancel = true;”,这样关闭按钮就失效了,按快捷键“Alt+空格+C”也关闭不了,只有用任务管理器关了,或者用一条语句(“Application.Exit();”)关闭该生成的应用程序,用“Alt+F4”也能关闭。
3.将FormBoderstyle属性设置为None。这种方法是将整个标题栏去掉了。这样也是用快捷键“Alt+空格+C”关闭不了,只有用任务管理器关了,或者用一条语句(“Application.Exit();”)关闭生成的该应用程序,用“Alt+F4”也能关闭。
相似回答