淡入淡出形式 [英] Fading in and fading out for a form
问题描述
我有一个要求我的窗体是透明的,如果我的鼠标进入窗体
应该是可见的,如果我的鼠标离开它变成透明的窗体,则我要放置三个不同的控件窗体,每个控件的鼠标离开和鼠标输入都与窗体相同。如果我的鼠标进入表单并进入控件
,则form_mouseleaveevent和control_mouseenterd被触发,因此我无法实现,该如何克服。
i have a requirement in which my form is transparent,if my mouse enters into it the form should became visible,if my mouse leaves out of the form it becomes transparent, i have three different controls placed in my form , each controls mouse leave and mouse enter is the same that of the form . if my mouse enters into the form and enters into a control form_mouseleaveevent and control_mouseenterd gets fired so iam not able to achieve it,how to overcome this.
private void TransToOpac()
{
if (!isTransparent)
return;
if (TtoOON == false )
{
TtoOON = true;
for (i = this.Opacity; i <= 1; i = i + 0.02)
{
this.Opacity = i;
Thread.Sleep(50);
}
isTransparent = false;
TtoOON = false;
}
}
private void OpacToTrans()
{
if (isTransparent)
return;
if (OtoTON == false )
{
OtoTON = true;
for (i = this.Opacity; i >= 0.5; i = i - 0.02)
{
this.Opacity = i;
Thread.Sleep(50);
}
isTransparent = true;
OtoTON = false;
}
}
私有无效OnMouseEntered(对象发送者,EventArgs e)
{
TransToOpac();
}
私人无效OnMouseLeft(对象发送者,EventArgs e)
{
OpacToTrans();
}
private void OnMouseEntered(object sender, EventArgs e) { TransToOpac(); } private void OnMouseLeft(object sender, EventArgs e) { OpacToTrans(); }
推荐答案
使用MouseEnter / Leave事件无法完成此操作。较小的问题是,如果控件靠近边缘,则窗体的Leave事件可能永远不会触发。更大的问题是,当光标移到非工作区(边框,标题)时,它将触发,您不想在用户尝试关闭或调整窗口大小时淡化窗体。
You can't get this done with MouseEnter/Leave events. The smaller problem is that the form's Leave event may never fire if a control is close to the edge. The bigger problem is that it will fire when the cursor moves into the non-client area (border, caption), you don't want to fade the form when the user tries to close or resize the window.
简单而有效的解决方案是使用计时器检查鼠标的位置:
The crude but effective solution is to use a timer to check where the mouse is located:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.Opacity = 0.99; // Avoid flicker
mFadeTimer.Interval = 15;
mFadeTimer.Tick += new EventHandler(mFadeTimer_Tick);
mMouseTimer.Interval = 200;
mMouseTimer.Tick += new EventHandler(mMouseTimer_Tick);
mMouseTimer.Enabled = true;
}
void mMouseTimer_Tick(object sender, EventArgs e) {
if (this.Bounds.Contains(Control.MousePosition)) {
if (mFade <= 0) { mFade = 1; mFadeTimer.Enabled = true; }
}
else {
if (mFade >= 0) { mFade = -1; mFadeTimer.Enabled = true; }
}
}
void mFadeTimer_Tick(object sender, EventArgs e) {
double opaq = this.Opacity + mFade * 0.05;
if (opaq >= 0.99) { opaq = 0.99; mFadeTimer.Enabled = false; }
if (opaq <= 0.15) { opaq = 0.15; mFadeTimer.Enabled = false; }
this.Opacity = opaq;
}
private Timer mFadeTimer = new Timer();
private Timer mMouseTimer = new Timer();
private int mFade = 0;
}
这篇关于淡入淡出形式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!