C# - 如何在窗体失去焦点时触发不透明度事件?

3
目的是当表单失去焦点时触发不透明度事件。该表单具有“始终置顶”的设置。视觉效果将是单击可能重叠的窗口,但未聚焦时,表单仍保持在顶部,但略微透明地位于角落,使其易于访问,但提供对下面的内容的可见性。
我已经搜索了很多谷歌,但无法弄清楚如何使此事件在表单失去焦点后正确触发,然后当表单重新获得焦点时将不透明度恢复到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;
               }

          }

我认为我们需要更多的信息。我创建了一个Windows应用程序,在构造函数中连接了LostFocus事件,然后在LostFocus事件的方法中将Opacity设置为0.5。对我来说它完全正常运行。 - jasonh
你能给我展示一下样本代码吗?这样我就可以看到你做了什么。 - sheldonhull
2个回答

7
看起来你正在寻找 ActivatedDeactivate 事件。
更新:
针对评论中提到的 LostFocus 事件,需要澄清它的工作原理。 FormLostFocus 事件是从 Control 继承而来的。当控件失去焦点时,它会被触发;无论是因为窗体本身被停用(例如焦点移到另一个应用程序),还是因为焦点移到同一窗体内的另一个控件。
如果为仅包含至少一个可接收焦点控件的表单挂钩 LostFocus 事件的事件处理程序,则会发现在显示表单后立即引发表单的 LostFocus 事件。这是因为焦点从表单(一个 Control)移动到表单上第一个可聚焦的控件。
因此,表单处于活动状态和表单处于焦点状态是两种不同的行为。

是的!感谢您的快速回答。那立刻解决了问题。我一开始感觉很愚蠢,但只是没有正确理解我的事件...是否有事件的备忘单或参考列表供将来参考? - sheldonhull
2
抱歉,不知道是否有一个好的备忘单。也许我应该制作一个并发布在我的博客上...这是个好想法。 - Fredrik Mörk
失去焦点事件可能是我的第一个想法,但这是 WinForm 的方式。 - benPearce
1
MSDN,史上最好的备忘单 ;) (嗯,至少是最完整的...) http://msdn.microsoft.com/zh-cn/library/system.windows.forms.form_events.aspx - Thomas Levesque

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接