【问题标题】:C# - How to trigger opacity event when form loses focus?C# - 当表单失去焦点时如何触发不透明事件?
【发布时间】:2009-06-17 22:00:15
【问题描述】:

目的是在表单失去焦点时触发 opacity 事件。该表单具有 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;
               }

          }

【问题讨论】:

  • 我认为我们需要更多信息。我创建了一个 WindowsApplication,在构造函数中连接了 LostFocus 事件,然后在 LostFocus 事件的方法中将 Opacity 设置为 0.5。它对我来说很好用。
  • 示例代码让我看看你做了什么?

标签: c# event-handling


【解决方案1】:

听起来好像您正在寻找Activated 和Deactivate 事件。

更新

为了回应关于LostFocus 事件的评论,澄清它是如何工作的可能会很有趣。 Form 的 LostFocus 事件继承自 Control。当控件失去焦点时引发;要么是因为表单本身被停用(例如焦点移动到另一个应用程序),要么是因为焦点移动到同一表单内的另一个控件。

如果您为仅包含至少一个可以接收焦点的控件的表单的LostFocus 事件挂接事件处理程序,您会发现该表单的LostFocus 事件在之后立即引发表格显示。这是因为焦点从表单(Control)移动到表单上的第一个可聚焦控件。

因此,处于活动状态的表单和被聚焦的表单是两种不同的行为。

【讨论】:

  • 是的!感谢你及时的答复。立即修复它。我觉得自己很愚蠢,但只是不知道我的活动是正确的......是否有活动备忘单或参考列表以供将来参考?
  • 抱歉,不知道有没有好的备忘单。也许我应该做一个并在我的博客上发布......好主意。
  • 失去焦点事件是我的第一个想法,但这是winform的方式
  • MSDN,有史以来最好的备忘单;)(嗯,无论如何,最完整的......)msdn.microsoft.com/en-us/library/…
【解决方案2】:

你试过用鼠标进入/离开事件吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2019-08-18
    相关资源
    最近更新 更多