C# 如何隐藏窗体 懂的进
如何隐藏窗体.如题.就像QQ主窗体那样.(不是登陆窗体,外行不要进来啦).不是什么hide().那个是小孩子玩的把戏.是用什么事件,还是有什么属性.告诉下.OK.谢....
如何隐藏窗体.如题.
就像QQ主窗体那样.(不是登陆窗体,外行不要进来啦).
不是什么hide().那个是小孩子玩的把戏.
是用什么事件,还是有什么属性.
告诉下.OK.谢. 展开
就像QQ主窗体那样.(不是登陆窗体,外行不要进来啦).
不是什么hide().那个是小孩子玩的把戏.
是用什么事件,还是有什么属性.
告诉下.OK.谢. 展开
展开全部
你指的是像QQ那样最小化成托盘吧。如果是可以用首先:当然要引入NotifyIcon控件。工具箱内有该控件,如果你有点基础能看懂下面代码
private System.Windows.Forms.NotifyIcon notifyIconServer;
this.notifyIconServer = new System.Windows.Forms.NotifyIcon(this.components);
接下来设置控件的各项属性:
//
// notifyIconServer
//
this.notifyIconServer.ContextMenu = this.contextMenuTray;//指定上下文菜单
this.notifyIconServer.Icon = ((System.Drawing.Icon)(resources.GetObject(notifyIconServer.Icon)));//指定图标
this.notifyIconServer.Text = My Server;//指定鼠标悬停显示
this.notifyIconServer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.notifyIconServer_MouseDown);
this.notifyIconServer.DoubleClick += new System.EventHandler(this.notifyIconServer_DoubleClick);
//
// contextMenuTray 上下文菜单
//
this.contextMenuTray.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem2});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.Text = 打开 Chat Server;
this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
//
// menuItem2
//
this.menuItem2.Index = 1;
this.menuItem2.Text = 退出程序;
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
用户点击窗体的“关闭”小按钮时,并不真正关闭窗体,而是将程序放到系统托盘。
private void ChatForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true; // 取消关闭窗体
this.Hide();
this.ShowInTaskbar = false;
this.notifyIconServer.Visible = true;//显示托盘图标
}
notifyIcon的双击事件,可以恢复程序窗体:
private void notifyIconServer_DoubleClick(object sender, System.EventArgs e)
{
this.Show();
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
this.Activate();
}
解决方案如下:
首先声明一个上下文菜单:
//
// contextMenuLeft 左键菜单
//
this.contextMenuLeft.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem3});
//
// menuItem3
//
this.menuItem3.Index = 0;
this.menuItem3.Text = 关于……;
由于不能在notifyIcon上直接显示上下文菜单,只有创建一个Control作为容器,这是权宜之计,应该有更好的方法吧。
private void notifyIconServer_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
Control control = new Control(null,Control.MousePosition.X,Control.MousePosition.Y,1,1);
control.Visible = true;
control.CreateControl();
Point pos = new Point(0,0);//这里的两个数字要根据你的上下文菜单大小适当地调整
this.contextMenuLeft.Show(control,pos);
}
}
private System.Windows.Forms.NotifyIcon notifyIconServer;
this.notifyIconServer = new System.Windows.Forms.NotifyIcon(this.components);
接下来设置控件的各项属性:
//
// notifyIconServer
//
this.notifyIconServer.ContextMenu = this.contextMenuTray;//指定上下文菜单
this.notifyIconServer.Icon = ((System.Drawing.Icon)(resources.GetObject(notifyIconServer.Icon)));//指定图标
this.notifyIconServer.Text = My Server;//指定鼠标悬停显示
this.notifyIconServer.MouseDown += new System.Windows.Forms.MouseEventHandler(this.notifyIconServer_MouseDown);
this.notifyIconServer.DoubleClick += new System.EventHandler(this.notifyIconServer_DoubleClick);
//
// contextMenuTray 上下文菜单
//
this.contextMenuTray.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem1,
this.menuItem2});
//
// menuItem1
//
this.menuItem1.Index = 0;
this.menuItem1.Text = 打开 Chat Server;
this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
//
// menuItem2
//
this.menuItem2.Index = 1;
this.menuItem2.Text = 退出程序;
this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
用户点击窗体的“关闭”小按钮时,并不真正关闭窗体,而是将程序放到系统托盘。
private void ChatForm_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel = true; // 取消关闭窗体
this.Hide();
this.ShowInTaskbar = false;
this.notifyIconServer.Visible = true;//显示托盘图标
}
notifyIcon的双击事件,可以恢复程序窗体:
private void notifyIconServer_DoubleClick(object sender, System.EventArgs e)
{
this.Show();
if (this.WindowState == FormWindowState.Minimized)
this.WindowState = FormWindowState.Normal;
this.Activate();
}
解决方案如下:
首先声明一个上下文菜单:
//
// contextMenuLeft 左键菜单
//
this.contextMenuLeft.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuItem3});
//
// menuItem3
//
this.menuItem3.Index = 0;
this.menuItem3.Text = 关于……;
由于不能在notifyIcon上直接显示上下文菜单,只有创建一个Control作为容器,这是权宜之计,应该有更好的方法吧。
private void notifyIconServer_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
Control control = new Control(null,Control.MousePosition.X,Control.MousePosition.Y,1,1);
control.Visible = true;
control.CreateControl();
Point pos = new Point(0,0);//这里的两个数字要根据你的上下文菜单大小适当地调整
this.contextMenuLeft.Show(control,pos);
}
}
展开全部
我在作系统托盘时,是这样作的,当点击最小化后,缩至任务栏并且隐藏主窗,任务托盘提示:
if (this.WindowState == FormWindowState.Minimized)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
else
{
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
}
if (this.WindowState == FormWindowState.Minimized)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
else
{
this.WindowState = FormWindowState.Minimized;
this.Visible = false;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一楼不是一样使用hide方法吗?this.Hide();
所以说隐藏窗口就是Hide方法,不然还能使用什么?加入LZ希望做的是程序界面移到屏幕边缘就隐藏的话,可以通过这种方式实现。
public partial class Form1 : Form
{
public int FormHeight;//窗体的原始高度
public int FormWidth;//窗体的原始宽度
public bool CanHide;//窗体能否隐藏
public Form1()
{
InitializeComponent();
//初始化成员变量
FormHeight = this.Height;//得到原始高度
FormWidth = this.Width;//得到原始宽度
CanHide = false;//窗体不能隐藏
}
/// <summary>
/// 当窗体的位置发生变化的时候发生
/// </summary>
protected override void OnMove(EventArgs e)
{
//如果窗体左上角的Y坐标<10,就认为窗体处于屏幕边缘
//这只是一种情况,其他情况我就省略了,LZ自己添加
if (this.Location.Y <= 10)
{
CanHide = true;//设置窗体能够隐藏
}
else
{
CanHide = false;
}
base.OnMove(e);
}
/// <summary>
/// 当鼠标离开界面的时候发生
/// </summary>
protected override void OnMouseLeave(EventArgs e)
{
if (CanHide)
{
//如果窗体能隐藏,就把窗体的高度设置为0像素,这样看起来就没有界面了。
//但是还是有个标题栏的。
this.Height = 0;
}
base.OnMouseLeave(e);
}
}//最后需要解决的是窗体展开,当鼠标移动到标题栏的时候,就让窗体的高度等于原始高度。但是这个事件我没找到,所以我暂时没写出来。
另外我们发现,QQ程序边缘隐藏后,它始终处于最前端,让程序处于最前端的方法是调用 API:详细请参见这里http://zhidao.baidu.com/question/54048819.html?si=1
所以说隐藏窗口就是Hide方法,不然还能使用什么?加入LZ希望做的是程序界面移到屏幕边缘就隐藏的话,可以通过这种方式实现。
public partial class Form1 : Form
{
public int FormHeight;//窗体的原始高度
public int FormWidth;//窗体的原始宽度
public bool CanHide;//窗体能否隐藏
public Form1()
{
InitializeComponent();
//初始化成员变量
FormHeight = this.Height;//得到原始高度
FormWidth = this.Width;//得到原始宽度
CanHide = false;//窗体不能隐藏
}
/// <summary>
/// 当窗体的位置发生变化的时候发生
/// </summary>
protected override void OnMove(EventArgs e)
{
//如果窗体左上角的Y坐标<10,就认为窗体处于屏幕边缘
//这只是一种情况,其他情况我就省略了,LZ自己添加
if (this.Location.Y <= 10)
{
CanHide = true;//设置窗体能够隐藏
}
else
{
CanHide = false;
}
base.OnMove(e);
}
/// <summary>
/// 当鼠标离开界面的时候发生
/// </summary>
protected override void OnMouseLeave(EventArgs e)
{
if (CanHide)
{
//如果窗体能隐藏,就把窗体的高度设置为0像素,这样看起来就没有界面了。
//但是还是有个标题栏的。
this.Height = 0;
}
base.OnMouseLeave(e);
}
}//最后需要解决的是窗体展开,当鼠标移动到标题栏的时候,就让窗体的高度等于原始高度。但是这个事件我没找到,所以我暂时没写出来。
另外我们发现,QQ程序边缘隐藏后,它始终处于最前端,让程序处于最前端的方法是调用 API:详细请参见这里http://zhidao.baidu.com/question/54048819.html?si=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是要隐藏的话,归根到底还是用hide。
如果要像qq一样通过鼠标移动出现,那应该是onmousemove事件中,修改窗体的大小和位置
如果要像qq一样通过鼠标移动出现,那应该是onmousemove事件中,修改窗体的大小和位置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
qq的隐藏窗体不是 扑捉鼠标事件然后改变窗体位置那么简单,因为如果用这种方法你会发现窗体的移动很不平滑,完全没有舒服的感觉,以前看过一篇文章讲模拟QQ的隐藏,貌似是用了什么api,不过我也没仔细研究,你可以去网上搜搜,这几天csdn被封了,查资料麻烦了不少
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询