c# - C#:OnRenderSplitButtonBackground 覆盖后消失的箭头
问题描述
我试图ToolStripSplitButton
使用覆盖来更改 a 的背景,但是通过这样做,当鼠标悬停在按钮上时,下拉菜单上的箭头会消失。
代码:
protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e)
{
if (!e.Item.Selected)
{
base.OnRenderSplitButtonBackground(e);
}
else
{
Rectangle button = new Rectangle(0, 0, e.Item.Size.Width - 12, e.Item.Size.Height - 1);
e.Graphics.FillRectangle(Brushes.White, button);
e.Graphics.DrawRectangle(Pens.Olive, button);
Rectangle dropdown = new Rectangle(e.ToolStrip.Items[0].Size.Width - 1, 0, e.Item.Size.Width - 32, e.Item.Size.Height - 1);
e.Graphics.FillRectangle(Brushes.White, dropdown);
e.Graphics.DrawRectangle(Pens.Olive, dropdown);
}
}
结果如下所示:
我知道它OnRenderArrow
存在,我也试图覆盖它,但它看起来dropdown
被OnRenderSplitButtonBackground
.
我应该如何解决这个问题?提前致谢!
解决方案
如果将e.Item
属性返回的基类(ToolStripItem)转换为ToolStripSplitButton类,您将获得所有相关属性来绘制拆分按钮的不同部分。
边界属性,例如ButtonBounds、 DropDownButtonBounds、SplitterBounds。国家财产;ButtonPressed、ButtonSelected、DropDownButtonPressed等。
至于箭头部分。您需要调用该OnRenderArrow
方法。
例子
protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e)
{
if (!e.Item.Selected || e.Item.Pressed)
base.OnRenderSplitButtonBackground(e);
else
{
var sb = e.Item as ToolStripSplitButton;
var button = sb.ButtonBounds;
var dropdown = sb.DropDownButtonBounds;
button.Width--;
button.Height--;
dropdown.Width--;
dropdown.Height--;
var br = sb.ButtonPressed ? Brushes.Gainsboro : Brushes.White;
e.Graphics.FillRectangle(br, button);
e.Graphics.DrawRectangle(Pens.Olive, button);
e.Graphics.FillRectangle(Brushes.White, dropdown);
e.Graphics.DrawRectangle(Pens.Olive, dropdown);
OnRenderArrow(new ToolStripArrowRenderEventArgs(
e.Graphics, e.Item, sb.DropDownButtonBounds, e.Item.ForeColor,
ArrowDirection.Down));
}
}
推荐阅读
- c - 如何用 goto 翻译 if .. else 语句?
- c++ - 如何使用 .sdf 文件修复 RDkit 中的“OSError:文件错误:输入文件错误”?
- xml - 在 XSLT 上将名称标记为文本和表格标签重复
- html - 如何允许用户手动调整垂直元素?
- c++ - 如何将 c 字符串转换为指针数组,其中每个指针都是 char 数组中的一个单词?
- vue.js - webpack 包大小大于应有的大小
- quicksort - 快速排序比归并排序慢
- python - 如何在嵌入之后或之前执行过采样?
- python - Pygame 事件处理程序相互干扰?
- javascript - JQuery/Javascript 动画 div 缩小和缩小