gpt4 book ai didi

c# - 如何将图像放在 ToolStripMenuItem(或类似控件)的文本旁边?

转载 作者:行者123 更新时间:2023-11-30 14:31:35 25 4
gpt4 key购买 nike

我知道可以将图像添加到 ToolStripMenuItem,如下图中的“关闭所有文档”项:

Menu with some ToolStripMenuItems

但是,我想实现的是这样的:

enter image description here

也就是将图片放在item文本的旁边,但不与check space重叠。我搜索了一下,但找不到可以执行此操作的 Winforms 控件。你能指点我吗?还是我必须自己实现?谢谢。

编辑:感谢大家的回答!周末后我会接受一个。

最佳答案

你必须使用一些自定义绘画。有一些方法可以实现这一点,但我想介绍一下使用一些自定义 ToolStripRenderer。以下只是一个demo代码,大家可以自行完善。为方便起见,我将每个 inner Image 保存在相应项目的 Tag 中:

public class CustomRenderer : ToolStripProfessionalRenderer
{
int innerImagePadding = 2;
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) {
Image img = e.Item.Tag as Image;
if(img == null) base.OnRenderItemText(e);
else {
e.Graphics.DrawImage(img, e.Item.ContentRectangle.Left + e.Item.Bounds.Height + innerImagePadding,
e.Item.ContentRectangle.Top + innerImagePadding,
Math.Max(1, e.Item.ContentRectangle.Height - innerImagePadding*2),
Math.Max(1, e.Item.ContentRectangle.Height - innerImagePadding*2));
Rectangle textRect = new Rectangle(e.Item.ContentRectangle.Left + e.Item.Bounds.Height*2,
e.Item.ContentRectangle.Top +1,
e.TextRectangle.Width,
e.TextRectangle.Height);
e.Graphics.DrawString(e.Text, e.TextFont, new SolidBrush(e.TextColor), textRect);
}
}
}

//Usage
ContextMenuStrip cm = new ContextMenuStrip();
cm.Items.Add(new ToolStripMenuItem("Clear all", myImage) {Tag = myImage});
cm.Items.Add(new ToolStripMenuItem("Remove all", myImage){Tag = myImage});
this.ContextMenuStrip = cm; //set the ContextMenuStrip for the form
//set the custom Renderer
cm.Renderer = new CustomRenderer();

enter image description here

关于c# - 如何将图像放在 ToolStripMenuItem(或类似控件)的文本旁边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19861214/

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