当鼠标悬停在特定按钮上时,我想在面板周围绘制边框,以便提供某种突出显示效果,并且在 MouseLeave 事件中边框将消失。如何实现这一目标?我是 Winform 应用程序开发的新手。
PS-我在面板绘制事件中绘制了一个矩形,但我想在鼠标悬停时显示该矩形。我尝试过 Invalidate() 但没有任何反应。
最佳答案
请密切关注我的回答,我已经在本地测试过了,对你来说应该没问题:
1) 向您的项目添加一个新类,将其命名为 MyPanel.cs
2) 将类的默认文本替换为:
[System.ComponentModel.DesignerCategory("Code")]
public class MyPanel : Panel
{
public Pen MyPen;
public MyPanel()
{
SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
MyPen = Pens.Red;
}
protected override void OnPaint(PaintEventArgs e)
{
using (SolidBrush brush = new SolidBrush(BackColor))
e.Graphics.FillRectangle(brush, ClientRectangle);
e.Graphics.DrawRectangle(MyPen, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
}
}
这是在您的应用程序的命名空间内,不要忘记这一点
3) 转到 Form1.cs [设计]
4) 从工具箱添加新按钮 toolbox->button
5)双击表单内的一些空闲空间,生成private void Form1_Load(object sender, EventArgs e)
6) 返回设计器,单击一次按钮,然后在属性框中切换到事件
(闪电小图标)
7)双击MouseHover
生成private void button1_MouseHover(object sender, EventArgs e)
现在我们的设置已准备就绪,让我们付诸行动:
8) 在 public 分部类 Form1 : Form
下实例化 MyPanel 类:
MyPanel p = new MyPanel();
9) 在 private void Form1_Load(object sender, EventArgs e)
中,我们可以设置此实例并将其添加到表单的控件中:
p.Location = new Point(10, 10);
p.Size = new Size(100, 100);
Controls.Add(p);
10) 我们需要做的最后一件事是更改按钮悬停时的边框颜色,因此让我们在 private void button1_MouseHover(object sender, EventArgs e)
中执行此操作:
p.MyPen = Pens.Yellow;
p.Refresh();
就是这样:)
Ps:如果你想让边框消失,请使用MouseLeave
事件并将面板的MyPen
更改为Pens.Transparent
关于c# - 如何在按钮悬停时在面板周围绘制边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740877/