簡體   English   中英

當 RenderMode 為“System”時,ToolStripMenuItem 不能顯示復選標記和圖像(圖標)?

[英]ToolStripMenuItem can't show checkmark and Image (icon) when RenderMode is “System”?

我的 Windows Forms 應用程序有一個MenuStrip並且一些菜單項( ToolStripMenuItem )有一個圖標(設置ToolStripMenuItem.Image屬性)。

MenuStripRenderMode屬性設置為ToolStripRenderMode.System時,如果CheckedCheckOnClick屬性為 true 並且菜單項具有圖標,則不顯示復選標記。

當我將MenuStrip.RenderMode屬性切換到ToolStripRenderMode.ProfessionalToolStripRenderMode.RenderManagerMode時,它顯示。

不幸的是,這是一個問題,因為我的應用程序需要:

  1. 選取框模式下的ProgressBar ,因此需要Application.EnableVisualStyles()才能使其工作。
  2. 該應用程序需要“平面”視覺樣式,我通過省略對Application.EnableVisualStyles()的調用並在 MenuStrip 上保留默認ToolStripRenderMode.RenderManagerMode來實現。 但后來我無法獲得我的選框進度條!
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM