在做一个功能的时候,需要在右下角弹出一个提示窗口,像QQ那样的,找 了以前写的看了看,发现在任务栏高度发生变化时窗体会被遮盖住,这是因为窗体弹出的位置是控制在屏幕的右下角的,如果任务栏的高度发生变化,则窗体就会被遮盖,这样就需要在弹出窗体 的时候知道任务栏的高度,从而动态的控制窗体距离屏幕的距离。网上查了一些方法,感觉太复杂,于是根据自己的想法实现了这个功能,先用着,方法可能有点笨,不过还是实现了想要的效果。以下是实现方法:
新建一个窗口,设置窗体的各项属性shwoInTaskbar为false,maximizebox为false,minimizebox为false等
放置两个timer控件分别对两个timer控件写事件如下:
//timer1用于实现渐显效果
private void timer1_Tick(object sender, EventArgs e)
{
if (this.Opacity == 1) //如果窗体透明度为100%停止记时
{
this.timer1.Stop();
}
else //否则窗体透明度加0.05,直到为1
{
this.Opacity = this.Opacity + 0.05;
}
}
//timer2用于关闭时出现渐隐效果
private void timer2_Tick(object sender, EventArgs e)
{
if (this.Opacity == 0)
{
this.timer1.Stop();
this.timer2.Stop();
this.Close();
}
else
{
this.Opacity = this.Opacity - 0.1;
}
}
之后在窗体的load事件里写:
int Heightone = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height; //获取屏幕的高度
int Heighttwo = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; //获取工作区的高度
int screenX = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width; //获取屏幕的宽度int renwu = Heightone - Heighttwo; //屏幕的高度减去工作区的高度,得到任务栏的高度,只所以获取任务栏的高度,是由于一些时候任务栏的高度不固定。避免窗体被任务栏遮挡住
this.Top = Heightone - 160-renwu; //距离上边的距离=屏幕的高度-窗体的高度-任务栏的高度
this.Left = screenX - 290; //距离左边的距离=屏幕的宽度-窗体的宽度
this.Opacity = 0; //设置窗体的不透明度为0
this.timer1.Start(); //启动记时器