1

ContextMenuItem の一部である ToolStripMenuItem に BackgroundImage を設定しました。

マウスオーバーすると背景画像が消えます。その上に青い「ハイライト」ボックスが表示されます(少なくとも、それが起こっていると思います)。

マウスが上にあるときに背景画像を表示するにはどうすればよいですか?

MouseEnter イベントで画像を設定しようとしましたが、うまくいきませんでした。

4

3 に答える 3

3

ToolStripProfessionalRenderer から派生したクラスを作成する

public class customRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
        {
            // check if the object being rendered is actually a ToolStripButton
            if (e.Item is ToolStripButton)
            {
                ToolStripButton button = e.Item as ToolStripButton;

                // only render checked items differently
                if (button.Checked || button.Selected)
                {
                   //do work here
                }
                else
                    base.OnRenderButtonBackground(e);
            }
            // if this object is not a ToolStripButton, use the normal render event
            else
                base.OnRenderButtonBackground(e);
        }

        protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e)
        {
            //do checking here like above
            base.OnRenderItemBackground(e);
        }

    }

フォームコンストラクターにあるコントロールのrenderesを設定します-toolstrip(toolstrippbackground、toolstripbutton、contexmenustripなど)からすべてに対して機能します

toolStrip1.Renderer = new customRenderer();//if you have this and want to override any behaviour
            menuStrip1.Renderer = new customRenderer();//if you have this and want to override any behaviour
            contextMenuStrip1.Renderer = new customRenderer();//if you have this and want to override any behaviour
于 2013-06-14T03:53:36.747 に答える
2

これを行うには、カスタム レンダラーを使用する必要があります。

ContextMenuStrip で Renderer を設定する

contextMenuStrip1.Renderer = new BackgroundImageRenderer();

この「レンダラー クラス」を追加します。

必要に応じて変数をカスタマイズします。

private class BackgroundImageRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
    {
        if (!e.Item.Selected)
        {
            base.OnRenderMenuItemBackground(e);
        }
        else
        {
            if (e.Item.Name == "theNameOfMyToolStripMenuItem")
            {
                Image backgroundImage = global::YourProject.Properties.Resources.ImageFileName;
                e.Graphics.DrawImage(backgroundImage, 0, 0, e.Item.Width, e.Item.Height);
            }
            else {
                base.OnRenderMenuItemBackground(e);
            }
        }
    }
}
于 2013-06-14T02:57:41.270 に答える
0
public class customRenderer : ToolStripProfessionalRenderer
{
    protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
    {
        // check if the object being rendered is actually a ToolStripButton
        if (e.Item is ToolStripButton)
        {
            ToolStripButton button = e.Item as ToolStripButton;

            // only render checked items differently
            if (button.Checked || button.Selected)
            {
               //do work here
            }
            else
                base.OnRenderButtonBackground(e);
        }
        // if this object is not a ToolStripButton, use the normal render event
        else
            base.OnRenderButtonBackground(e);
    }

    protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e)
    {
        //do checking here like above
        base.OnRenderItemBackground(e);
    }

}

これは私のために働いた

于 2014-04-16T09:43:13.923 に答える