- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望能够在我的一些工具条中更改 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 的高度以防止绘制的边框被切断):
关于c# - 使用平面样式更改 ToolStripComboBox 的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560812/
我有一个带有 ToolStripComboBox 控件的 ToolStrip,我希望它自动调整大小以适应下拉列表中最宽的项目。我怎样才能做到这一点? “Autosize”属性设置为“true”,但似乎
我发现很难将数据绑定(bind)到 ToolStripComboBox。它似乎没有 ValueMember 和 DisplayMember 属性。 如何绑定(bind)? 最佳答案 要访问 tools
我创建了一个 toolStripComboBox 并从数据库中检索所有项目列表选择,如下所示: private void toolStripComboBox1_Click(object sender,
我试图在我的 ToolStripComboBox 中禁用鼠标滚动,我以为我可以捕获鼠标滚轮事件,但是虽然该事件可用于 ComboBox,但它不适用于 ToolStripComboBox。有什么想法吗?
我希望能够在我的一些工具条中更改 ToolStripComboBox 控件的边框颜色,因为当与平面样式一起使用时,ComboBoxes 的默认边框颜色是 SystemColors.Window,它与工
我正在动态添加一个 ToolStripComboBox,我需要它看起来像一个普通的组合框。 工具条版本有可编辑区域,看起来完全不同。是否需要设置一个属性(或多个属性)以使其看起来像默认组合框? 最佳答
C# 我有 ToolStripComboBox 控件。有没有办法将此 ToolStripComboBox 绑定(bind)到列表? 最佳答案 尝试 List items = new List{"ite
ToolStripComboBox 放置在 ToolStripButton 之后,后面跟着另一个右对齐的。我如何最好地设置 ToolStripComboBox 以始终调整其长度以填充前面和下面的 To
我正在调试 .NET 4.0(WinForm,而非 WPF)应用程序在用户锁定/解锁机器或用户按 ctrl-alt-delete 然后按转义键(不是在这种情况下必须锁定——但他们可以选择锁定、调出任务
我是一名优秀的程序员,十分优秀!