[英]ToolStripMenuItem can't show checkmark and Image (icon) when RenderMode is “System”?
我的 Windows Forms 應用程序有一個MenuStrip
並且一些菜單項( ToolStripMenuItem
)有一個圖標(設置ToolStripMenuItem.Image
屬性)。
當MenuStrip
的RenderMode
屬性設置為ToolStripRenderMode.System
時,如果Checked
或CheckOnClick
屬性為 true 並且菜單項具有圖標,則不顯示復選標記。
當我將MenuStrip.RenderMode
屬性切換到ToolStripRenderMode.Professional
或ToolStripRenderMode.RenderManagerMode
時,它會顯示。
不幸的是,這是一個問題,因為我的應用程序需要:
ProgressBar
,因此需要Application.EnableVisualStyles()
才能使其工作。Application.EnableVisualStyles()
的調用並在 MenuStrip 上保留默認ToolStripRenderMode.RenderManagerMode
來實現。 但后來我無法獲得我的選框進度條!RenderMode
設置為ToolStripRenderMode.System
解決了外觀要求,但取消了檢查帶有圖標的菜單項的能力。有什么辦法可以滿足我的所有要求嗎? 我錯過了什么嗎? 感謝您的關注。
哇,我難住了。 現在我知道我必須編寫一些嚴肅的代碼。
無論如何,答案是:通過創建繼承自ToolStripSystemRenderer
ToolStripRenderer
用您自己的代碼覆蓋繪制項目的方法。 這是我正在尋找的專門繪制檢查項目的內容。 它會檢查ToolStripMenuItem
是否沒有圖像。
protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e)
{
base.OnRenderItemCheck(e);
if (e.Item.Selected)
{
Rectangle rect = new Rectangle(3, 1, 20, 20);
Rectangle rect2 = new Rectangle(4, 2, 18, 18);
SolidBrush b = new SolidBrush(Color.FromArgb(49, 106, 197));
SolidBrush b2 = new SolidBrush(Color.Orange);
e.Graphics.FillRectangle(b, rect);
e.Graphics.FillRectangle(b2, rect2);
e.Graphics.DrawImage(e.Image, new Point(5, 3));
}
else
{
Rectangle rect = new Rectangle(3, 1, 20, 20);
Rectangle rect2 = new Rectangle(4, 2, 18, 18);
SolidBrush b = new SolidBrush(Color.FromArgb(49, 106, 197));
SolidBrush b2 = new SolidBrush(Color.Orange);
e.Graphics.FillRectangle(b, rect);
e.Graphics.FillRectangle(b2, rect2);
e.Graphics.DrawImage(e.Image, new Point(5, 3));
}
}
我也遇到了一個更簡單的選擇:
您可以簡單地將菜單項放入 ContextMenuStrip,然后將其分配給 DropDownButton 的DropDown屬性。
希望這對那些不喜歡覆蓋 Paint 方法的人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.