gpt4 book ai didi

c# - "Hot Track"对 Windows 窗体用户控件的影响

转载 作者:太空狗 更新时间:2023-10-29 23:41:42 25 4
gpt4 key购买 nike

实现模拟“热轨”效果的 UserControl 的最简单方法是什么,当鼠标悬停在其上方时在其周围绘制边框?

我没有成功地尝试继承覆盖绘制边框的 OnMouseHover 事件的自定义控件(似乎没有触发该事件)

谢谢!

最佳答案

您可以通过在 UC 中使用精心放置的面板控件并通过监视低级 Windows 消息来观察鼠标的位置来模拟用户控件周围的边框外观。

在 UserControl 设计界面上添加一个面板并调整面板大小,以便只有一小部分 UC 设计界面可见(请参见下面的注释*)。设计表面的可见部分将成为您的彩色边框,因此相应地设置其“厚度”。将组成您的 UC 的其他控件添加到面板。

您的控件可能如下所示:
enter image description here

在您的 UC 中实现 IMessageFilter 接口(interface)。在 PreFilterMessage() 的实现中,您将检查鼠标相对于 UC 的位置,并在鼠标位于 UC 上时将 UC 的 BackColor 设置为您的边框颜色,或者在鼠标未位于 UC 上时返回默认颜色。因为 Panel 的 BackColor 没有改变,所以它对用户来说就像你的 UC 有一个边框。

这是您执行此操作所需的最少代码量:

public partial class UserControl1 : UserControl, IMessageFilter
{
public UserControl1() {
InitializeComponent();
Application.AddMessageFilter(this);
}

public bool PreFilterMessage(ref Message m) {
if (!this.IsDisposed && this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) {
this.BackColor = Color.Green; // Or whatever border color you want.
} else {
this.BackColor = SystemColors.Control; // Back to the UC's default border color.
}
return false;
}
}

注意:当我对此进行测试时,我很难让我的面板的背景色设置不透明。我通过暂时将设计器中的 BackColor 更改为不同的颜色然后将其更改回我的默认颜色 (Control) 来解决此问题。

关于c# - "Hot Track"对 Windows 窗体用户控件的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5900650/

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