模仿QQ实现在屏幕边缘隐藏的功能,但是出现了一点小问题!

qiuji 2003-09-09 02:43:03
我分别使用Form1_MouseEnter,Form1_MouseLeave实现了隐藏和显示的功能,
但是问题是:
如果窗体上没有其他控件时,一切正常
如果有其他控件,当鼠标放到该控件时,会执行Form1_MouseLeave事件,这样窗体又隐藏了,怎样在此时让窗体不隐藏?像QQ那样。
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainbowinfog 2003-09-13
  • 打赏
  • 举报
回复
up
ebluesky 2003-09-13
  • 打赏
  • 举报
回复
up
rouser 2003-09-10
  • 打赏
  • 举报
回复
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsApplication1
{
public class Form2 : System.Windows.Forms.Form
{
private System.Windows.Forms.Timer timer1;
private System.ComponentModel.IContainer components;

private int Seed = 3;
const int OUTSIDE = 9; // 3 pixels
const int WHOLE = 90; // whole height
private int STAY = 1;
private System.Windows.Forms.Timer timer2;


public Form2()
{
InitializeComponent();
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.timer2 = new System.Windows.Forms.Timer(this.components);
//
// timer1
//
this.timer1.Interval = 1;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// timer2
//
this.timer2.Interval = 500;
this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
//
// Form2
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 15);
this.BackColor = System.Drawing.Color.Brown;
this.ClientSize = new System.Drawing.Size(560, 10);
this.ControlBox = false;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Form2";
this.TopMost = true;
this.Load += new System.EventHandler(this.Form2_Load);
this.MouseEnter += new System.EventHandler(this.Form2_MouseEnter);
this.MouseLeave += new System.EventHandler(this.Form2_MouseLeave);

}
#endregion

private void Form2_Load(object sender, System.EventArgs e)
{
this.Top = 0;
this.Left = 0;
this.Width = Screen.PrimaryScreen.WorkingArea.Width;
this.Height = OUTSIDE;
}

private void timer1_Tick(object sender, System.EventArgs e)
{
if(this.Height >= WHOLE && Seed > 0)
{
this.timer1.Enabled = false;
}

if(this.Height <= OUTSIDE && Seed < 0)
{
this.timer1.Enabled = false;
this.timer2.Enabled = false;
}

this.Height += Seed;
}

private void timer2_Tick(object sender, System.EventArgs e)
{
STAY ++;
if(this.STAY == 2)
{
timer1.Enabled = true;
STAY = 0;
}
}

private void Form2_MouseEnter(object sender, System.EventArgs e)
{
if(this.Height == WHOLE)
return;

Seed = 3;
timer1.Enabled = true;
}

private void Form2_MouseLeave(object sender, System.EventArgs e)
{
if(this.Height == OUTSIDE)
return;

Seed = -3;
timer2.Enabled = true;
}
}
}
qiuji 2003-09-09
  • 打赏
  • 举报
回复
up
问道er 2003-09-09
  • 打赏
  • 举报
回复
我也在做这个,我们可以讨论一下吧!
我的qq:149724938

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧