当用户将鼠标悬停在标签上时,它将向标签添加top-border
和bottom-border
。
与此类似的内容:http://ianlunn.github.io/Hover/-〉边框过渡-〉从中心添加下划线。
但是,我只知道如何定义正常的边框,我甚至不会改变边框的颜色,他的宽度等等...
这就是我目前所取得的成就:
设计师.cs:
this.label1.BackColor = System.Drawing.SystemColors.ActiveCaption;
this.label1.Font = new System.Drawing.Font("Arial", 16F, System.Drawing.FontStyle.Bold);
this.label1.Location = new System.Drawing.Point(124, 187);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(217, 65);
this.label1.TabIndex = 0;
this.label1.Text = "Something Cool";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.label1.MouseHover += new System.EventHandler(this.label1_MouseHover);
this.label1.MouseLeave += new System.EventHandler(this.label1_MouseLeave);
密码:
private void label1_MouseHover(object sender, EventArgs e)
{
label1.BorderStyle = BorderStyle.FixedSingle;
label1.Font = new Font("Arial", 18, FontStyle.Bold);
}
private void label1_MouseLeave(object sender, EventArgs e)
{
// initialize
label1.BorderStyle = BorderStyle.None;
label1.Font = new Font("Arial", 16, FontStyle.Bold);
}
2条答案
按热度按时间lo8azlld1#
首先我建议你使用
label1_MouseEnter()
事件而不是label1_MouseHover()
事件。因为当你悬停在label1
上时,hover事件会不断触发。这是不必要的,因为你会在输入标签时改变label1
的外观,一旦你离开它,就会把它改回默认的。所以MouseEnter()
是你的首选。我们将定义一个
bool
变量来检查是否在label1
周围绘制了一个替代边框。我们在MouseEnter()
和MouseLeave()
事件中更改了它的值。在这些事件中,我们将调用
label1.Refresh()
,它将重绘控件,因此将触发它的Paint()
事件。现在我们验证是否绘制了一个新的 * 特殊边框 * shell。如果是,我们使用ControlPaint类及其DrawBorder()方法来绘制一个
label1
的Rectangle
大小的自定义边框。您可以根据需要修改此边框。如果我们不想绘制此 * 特殊边框 *,我们画了一个 default 边框。它的颜色和Form
的背景颜色一样,所以看起来label1
周围没有任何边框。在
ControlPaint.DrawBorder()
的方法参数中,请注意0
而不是2
。* 矩形宽度 * 的ControlPaint.DrawBorder()
参数如下:int rightWidth
int bottowmWidth
这就是为什么我将
0
设置为第一个和第三个值,这样左右两边就不会画边框了。你可以根据自己的需要进行调整。ercv8c1e2#
创建一个填充为1px的面板,并将label1放入该面板中,而不是更改边框颜色。如果要更改边框颜色,请更改面板的颜色。