2

私の目標は、toolStripButton と toolStripDropDownButton にイメージを完全に合わせることです。

ボタン内の画像が画像プロパティで設定されている場合、ボタン内に画像を完全に収めることができません。ボタンのマージン、ボーダー、または何かのためです(正確にはわかりません)。

そこで、BackgroundImage プロパティを使用してボタンに画像を設定しようとしました。プロパティ(AutoSize、Sizeなど)を調整した後、画像をボタンに合わせることができます。

しかし、この場合、背景画像を見ることができません。マウスカーソルがボタン上にあると消えます。

どうすればこの問題を解決できますか??

画像プロパティ。画像間のギャップを取り除くことができません。 代替テキスト

BackgroundImage プロパティ。画像の上にマウスカーソルがあると画像が見えません。 代替テキスト

4

2 に答える 2

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);
                }
            }
        }
    }

}

// 何か... 行を埋めて、ボタンが押されているか選択されていることをユーザーに明らかにする何らかの描画を行う必要があります。太いペンで長方形を描くかもしれませんが、それはあなた次第です。

于 2010-03-22T21:53:02.317 に答える
2

ToolStripButton の背景に画像を表示する場合、マウスをその上に移動すると、設計上、画像が消えます。ToolStripButton の MouseOver 効果は、背景画像の上に描画されます。それ以外の場合、効果は表示されません。

ToolStripButton の Image プロパティを設定するときは、ImageScaling が 'None' に設定されていることを確認して、AutoSizing 機能が ToolStripButton を画像サイズに合わせて拡大することを保証します。

「画像間のギャップ」は ToolStrip オブジェクトに設計されているため、ユーザーは一方のボタンがどこで終了し、もう一方のボタンがどこで開始するかがわかります。

于 2010-03-22T21:22:10.167 に答える