gpt4 book ai didi

c# - 使用平面样式更改 ToolStripComboBox 的边框

转载 作者:太空狗 更新时间:2023-10-29 23:17:04 25 4
gpt4 key购买 nike

我希望能够在我的一些工具条中更改 ToolStripComboBox 控件的边框颜色,因为当与平面样式一起使用时,ComboBoxes 的默认边框颜色是 SystemColors.Window,它与工具条。在 Reflector 中进行了大量研究之后,我没有看到任何明显的方法来做到这一点,因为 ComboBox 渲染背后的所有基础设施都在内部和私有(private)接口(interface)后面受到高度保护。

在 ToolStrip 之外,我所看到的用于修复 ComboBox 上的边框颜色的常见解决方案是子类化 ComboBox,覆盖 WndProc,然后手动绘制边框。这不适用于 ToolStripComboBox 控件,因为内部 ComboBox 控件是其自己的 ComboBox 私有(private)子类,我看不到替换控件实例的方法。

我正在考虑的另一种解决方案是将一个扩展的 ComboBox 对象放入 ToolStripControlHost 中,这样我就可以绘制边框,但我不得不放弃一些专业的渲染器调整。我注意到的第二个缺点是在鼠标悬停期间偶尔会出现闪烁。

将我的设计切换到 WPF 不是一个可接受的解决方案。在用于绘制边框的父控件中包装控件也是 Not Acceptable ,因为这对 ToolStripControlHost 替代方案没有任何好处。

有没有人有聪明的解决方案来解决这个问题,或者是否有一个现有的(许可许可的)组合框平面样式渲染堆栈的重新实现在野外,它修复了现有实现中的一些缺点?

最佳答案

这是让它工作的方法......有点:)

Paint 创建事件处理程序ToolStrip的事件.然后遍历所有 ToolStripComboBoxes并在它们周围画一个矩形。

    private Color cbBorderColor = Color.Gray;
private Pen cbBorderPen = new Pen(SystemColors.Window);

private void toolStrip1_Paint(object sender, PaintEventArgs e)
{
foreach (ToolStripComboBox cb in toolStrip1.Items)
{
Rectangle r = new Rectangle(
cb.ComboBox.Location.X - 1,
cb.ComboBox.Location.Y - 1,
cb.ComboBox.Size.Width + 1,
cb.ComboBox.Size.Height + 1);

cbBorderPen.Color = cbBorderColor;
e.Graphics.DrawRectangle(cbBorderPen, r);
}
}

这是它的样子(请注意,您可能需要调整 ToolStrip 的高度以防止绘制的边框被切断):

enter image description here

关于c# - 使用平面样式更改 ToolStripComboBox 的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com