调整ToolStripButtons的大小以适合完整的BackGround图像

时间:2010-03-22 21:11:21

标签: .net image winforms toolstripbutton

我的目标是在toolStripButton和toolStripDropDownButton完全契合图像。

如果按钮中的图像设置了图像属性,我无法完全适合按钮中的图像。由于边距,边框或按钮的某些东西(我不完全确切)。

所以我尝试使用BackgroudImage属性在按钮中设置图像。在我调整了一些属性(如AutoSize,Size等等)之后,我可以将图像放在按钮中。

但在这种情况下,我看不到背景图片。当鼠标光标位于按钮中时,它会消失。

我该如何解决这个问题?

图片属性。我无法消除图像之间的差距。 alt text

BackgroundImage属性。当鼠标光标在图像上时,我看不到图像。 alt text

2 个答案:

答案 0 :(得分:3)

嗯,你发现了它为什么在Image属性周围留下了空间。您可以通过分配ToolStrip.Renderer属性来自定义按钮的呈现。这可能看起来像这样:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        toolStrip1.Renderer = new MyRenderer();
    }
    private class MyRenderer : ToolStripProfessionalRenderer {
        protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) {
            if (e.Item.BackgroundImage == null) base.OnRenderButtonBackground(e);
            else {
                Rectangle bounds = new Rectangle(Point.Empty, e.Item.Size);
                e.Graphics.DrawImage(e.Item.BackgroundImage, bounds);
                if (e.Item.Pressed) {
                    // Something...
                }
                else if (e.Item.Selected) {
                    // Something...
                }
                using (Pen pen = new Pen(Color.Black)) {
                    e.Graphics.DrawRectangle(pen, bounds.X, bounds.Y, bounds.Width - 1, bounds.Height - 1);
                }
            }
        }
    }

}

您必须填写// Something ...行并进行某种绘制,以便用户明白按下或选择按钮。也许画一个带有厚笔的矩形,这取决于你。

答案 1 :(得分:2)

当您在ToolStripButton的背景中显示图像时,将鼠标移到它上面会使其在设计中消失。 ToolStripButton的MouseOver效果是在任何背景图像的顶部绘制的,否则效果永远不会被看到。

当您设置ToolStripButton的Image属性时,请确保将ImageScaling设置为“None”以确保AutoSizing功能可以缩放ToolStripButton以适合图像大小。

“图像之间的间隙”设计在ToolStrip对象中,以便用户知道一个按钮的结束位置和另一个按钮的开始位置。