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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

这样就可以将关闭按钮置灰,并且将左上角点击弹出的系统菜单中的关闭菜单去掉。
参考技术A 双击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);
参考技术B 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”也能关闭。

在C#中怎样在两个Form之间传递数据(Winfrom)?

代码如下:

Form2中先定义一个delegate
public delegate void returnvalue( int i );
public returnvalue ReturnValue;
form2 中的button按钮代码如下:
private void button1_Click(object sender, System.EventArgs e)

    if ( ReturnValue != null )
        ReturnValue( 8 );

 
Form1中的button按键如下:
private void button1_Click(object sender, System.EventArgs e)

    Form2 temp = new Form2( );
    temp.ReturnValue = new temp.Form2.returnvalue( showvalue );
    temp.Show();

 
private void showvalue( int i )

    textBox1.Text = i.ToString();

 
点击form2的button,form1中的textbox中的值就会相应变化。
参考技术A 最好的方法就是利用构造函数进行传递,可以传参,也可以传数据,这个我用的最多 参考技术B 有四个方法:全局变量、属性、窗体构造函数和delegate。

第一个是双向传值,也就是说,form1和form2改变i的值,另一方也会受到影响。
第二个方法可以单向也可以双向传值。
第三个方法是form1->form2单向传值。
第四个方法是form2->form1单向传值。

第一个全局变量:
这个最简单,只要把变量描述成static就可以了,在form2中直接引用form1的变量,代码如下:
在form1中定义一个static变量public static int i= 9 ;
Form2中的钮扣按钮如下:
private void button1_Click(object sender, System.EventArgs e)

textBox1.Text = Form1.i.ToString();


第二个方法是利用属性,请详见我的博客:
http://blog.csdn.net/tjvictor/archive/2006/06/04/772711.aspx

第三个方法是用构造函数:
Form1 的button按钮这样写:
private void button1_Click(object sender, System.EventArgs e)

Form2 temp = new Form2( 9 );
temp.Show();


Form2 的构造函数这样写:
public Form2( int i )

InitializeComponent();
textBox1.Text = i.ToString();


第四个方法是用delegate,代码如下:
Form2中先定义一个delegate
public delegate void returnvalue( int i );
public returnvalue ReturnValue;
form2 中的button按钮代码如下:
private void button1_Click(object sender, System.EventArgs e)

if ( ReturnValue != null )
ReturnValue( 8 );


Form1中的button按键如下:
private void button1_Click(object sender, System.EventArgs e)

Form2 temp = new Form2( );
temp.ReturnValue = new temp.Form2.returnvalue( showvalue );
temp.Show();


private void showvalue( int i )

textBox1.Text = i.ToString();


点击form2的button,form1中的textbox中的值就会相应变化。

详见:
http://blog.csdn.net/tjvictor/article/details/824617

以上是关于C# winfrom中如何隐藏标题栏中的 关闭按钮图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在电子的自定义标题栏中显示/隐藏最大化/最小化按钮

隐藏/显示片段中的导航元素

以win形式隐藏在任务栏中的消息框

C#(Winfrom)窗体传值问题(子窗体回传值给父窗体)

c# winfrom应用程序关闭任务管理器中的进程

在 Swift 中使用 hidesBackButton 隐藏导航栏中的后退按钮