当用户悬停标签时,它会在标签上添加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
答案 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()
参数如下:
int leftWidth
int topWidth
int rightWidth
int bottowmWidth
这就是为什么我将值0
设置为第一个和第三个,因此右侧和左侧不会绘制边框。您可以根据需要进行调整。