gpt4 book ai didi

c# - MouseHover 和 MouseLeave 事件控制

转载 作者:行者123 更新时间:2023-11-30 13:23:21 26 4
gpt4 key购买 nike

我正在构建一个具有简单效果的简单表单 - 当鼠标不在表单上时不透明度降低,当鼠标在表单上时表单变得不透明。我目前遇到了几个困难:-

  1. 首先,我这样做了-

     this.MouseHover += new EventHandler(Form1_MouseHover);
    this.MouseLeave += new EventHandler(Form1_MouseLeave);

    但是我在表单中也有 1 个 richtextbox,当鼠标经过它时,表单再次失去了不透明度。我也必须添加这个:-

     richTextBox1.MouseHover+=new EventHandler(Form1_MouseHover);
    richTextBox1.MouseLeave+=new EventHandler(Form1_MouseLeave);

    想知道有没有更好的方法,因为richtextbox和表单边界之间还有一些差距,当鼠标光标移到那里时表单会失去不透明度。

  2. 如果鼠标不在表单上(假设最初),则表单不透明。现在,我希望表格在鼠标经过它时立即变得不透明,但只有当鼠标在表格上的移动完全停止时才会发生。如果我继续将鼠标移到窗体上,它不会变得不透明。这是事件存储在消息队列中的方式的问题吗?或者我是否能够做某事,因为我已经看到具有我正在尝试实现的效果的应用程序。

最佳答案

MouseEnter/Leave 事件太不可靠,无法执行此操作。最好的办法就是使用一个计时器来检查鼠标是否仍在窗口内。在窗体上放置一个计时器并使代码如下所示:

public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.Opacity = 0.99;
timer1.Interval = 200;
timer1.Enabled = true;
timer1.Tick += timer1_Tick;
}
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
timer1_Tick(this, e);
}
private void timer1_Tick(object sender, EventArgs e) {
this.Opacity = this.Bounds.Contains(this.PointToClient(Cursor.Position)) ? 0.99 : 0.20;
}
}

顺便说一句:避免将不透明度增加到 1.0,这会强制重新创建 native 窗口并且会产生很多副作用。最好使用 0.99。

关于c# - MouseHover 和 MouseLeave 事件控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552809/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com