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

时间:2018-01-25 12:02:50

标签: c# winforms

当用户悬停标签时,它会在标签上添加select date, fruit, sum(cnt) from t group by date, fruit order by date, fruit; final SearchView searchView = (SearchView) menuItem.getActionView(); searchView.setMaxWidth(Integer.MAX_VALUE);

类似于此的内容:http://ianlunn.github.io/Hover/ - >边界过渡 - >从中心下划线。

但是,我只知道如何定义普通边框。我甚至无法改变边框的颜色,宽度等等......

这是我迄今取得的成就:

designer.cs:

top-border

CS:

bottom-border

1 个答案:

答案 0 :(得分:4)

首先,我建议您使用label1_MouseEnter()事件而不是label1_MouseHover()事件。由于悬停事件在您徘徊label1时不断闪现。这是不必要的,因为只要你输入标签,你就会改变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()方法来绘制大小为label1 Rectangle的自定义边框。您可以根据需要修改此边框。如果我们不想绘制此特殊边框,我们会绘制默认边框。什么只是Form的Backcolor的颜色,所以看起来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. int leftWidth
  2. int topWidth
  3. int rightWidth
  4. int bottowmWidth
  5. 这就是为什么我将值0设置为第一个和第三个,因此右侧和左侧不会绘制边框。您可以根据需要进行调整。