更改WinForms控件边框颜色和外观

x8diyxa7  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(304)

当用户将鼠标悬停在标签上时,它将向标签添加top-borderbottom-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);
}
lo8azlld

lo8azlld1#

首先我建议你使用label1_MouseEnter()事件而不是label1_MouseHover()事件。因为当你悬停在label1上时,hover事件会不断触发。这是不必要的,因为你会在输入标签时改变label1的外观,一旦你离开它,就会把它改回默认的。所以MouseEnter()是你的首选。
我们将定义一个bool变量来检查是否在label1周围绘制了一个替代边框。我们在MouseEnter()MouseLeave()事件中更改了它的值。

bool changeBorder;

在这些事件中,我们将调用label1.Refresh(),它将重绘控件,因此将触发它的Paint()事件。

private void label1_MouseEnter(object sender, EventArgs e)
{
    changeBorder = true;
    label1.Refresh();
}

private void label1_MouseLeave(object sender, EventArgs e)
{
    changeBorder = false;
    label1.Refresh();
}

现在我们验证是否绘制了一个新的 * 特殊边框 * shell。如果是,我们使用ControlPaint类及其DrawBorder()方法来绘制一个label1Rectangle大小的自定义边框。您可以根据需要修改此边框。如果我们不想绘制此 * 特殊边框 *,我们画了一个 default 边框。它的颜色和Form的背景颜色一样,所以看起来label1周围没有任何边框。

private void label1_Paint(object sender, PaintEventArgs e)
{
    if (changeBorder)
    {
        ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,
                      Color.Red, 0, ButtonBorderStyle.Solid,
                      Color.Red, 2, ButtonBorderStyle.Solid,
                      Color.Red, 0, ButtonBorderStyle.Solid,
                      Color.Red, 2, ButtonBorderStyle.Solid);
    }
    else
        ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, this.BackColor, ButtonBorderStyle.None);
    }

ControlPaint.DrawBorder()的方法参数中,请注意0而不是2。* 矩形宽度 * 的ControlPaint.DrawBorder()参数如下:

  1. x1米19英寸1x
  2. x1米20英寸
  3. int rightWidth
  4. int bottowmWidth
    这就是为什么我将0设置为第一个和第三个值,这样左右两边就不会画边框了。你可以根据自己的需要进行调整。
ercv8c1e

ercv8c1e2#

创建一个填充为1px的面板,并将label1放入该面板中,而不是更改边框颜色。如果要更改边框颜色,请更改面板的颜色。

相关问题