C# - 当表单失去焦点时如何触发不透明度事件?

时间:2009-06-17 22:00:16

标签: c# event-handling

目的是在窗体失去焦点时触发不透明度事件。表单有一个STAY ON TOP的设置。视觉效果是点击一个可能重叠的窗口,然而未聚焦的形式将保持在顶部,但在角落稍微透明,使其易于访问,但提供对下面的东西的可见性。

我用谷歌搜索并用谷歌搜索,并且无法弄清楚当表格失去焦点时如何让这个事件正确点火,然后当表格获得焦点时,将不透明度恢复到100%或其他地方确定的等级。

提示?

// under designer.cs

// 
// CollectionToolForm
// 
//other code....
this.LostFocus += new System.EventHandler(goTransparent);



//method
          private void goTransparent(object sender, EventArgs e)
          {
               if (transparentCheck.Checked == true)
               {
                    this.Opacity = 0.50;
               }
               else
               {
                    this.Opacity = 1;
               }

          }

2 个答案:

答案 0 :(得分:6)

听起来好像您正在寻找ActivatedDeactivate事件。

<强>更新

在回应关于LostFocus事件的评论时,可能有必要澄清它是如何工作的。 LostFocus的{​​{1}}事件继承自Form。当控件失去焦点时会引发它;或者因为这样的表单被停用(焦点移动到另一个应用程序),或者因为焦点移动到同一表单中的另一个控件。

如果你为一个只包含至少一个可以获得焦点的控件的表单的Control事件挂钩事件处理程序,你会发现表单的LostFocus事件被引发< em>在显示表单后立即。这是因为焦点从表单(LostFocus)移动到表单上的第一个可聚焦控件。

因此,表单处于活动状态并且正在聚焦的表单是两种不同的行为。

答案 1 :(得分:0)

您尝试使用鼠标进入/离开事件吗?

public Form1()
{   
    this.MouseEnter += new System.EventHandler(this.Form1_MouseEnter);
    this.MouseLeave += new System.EventHandler(this.Form1_MouseLeave);
}

private void Form1_MouseLeave(object sender, EventArgs e)
{
    this.Opacity = 0.5;
}

private void Form1_MouseEnter(object sender, EventArgs e)
{
    this.Opacity = 1;
}