2008-10-07 80 views
0

我有一個C#表單,其中放置了左停靠的MenuStrip。這MenuStrip包含一些菜單項,其中包含子菜單,一些菜單項是有效的按鈕(點擊它們導致發生的行爲; n.b.,我知道這不是一個好的設計)。如何在左側停靠的MenuStrip上繪製箭頭?

我想讓菜單項與菜單項相關聯,在菜單項上繪製右箭頭,就像上下文菜單一樣。我已經劃分了ToolStripProfessionalRenderer,並且可以在適當的時間撥打OnRenderArrow()(例如,在OnRenderItemText()或類似內),但我似乎沒有辦法確定箭頭的正確位置。

因此,兩個相互關聯的問題在這裏:

  1. 有沒有辦法迫使箭頭上頂級菜單項來界定呢?
  2. 如果不是,有沒有辦法確定菜單項上箭頭的正確位置,以便手動調用OnRenderArrow()

謝謝!

回答

1

你爲什麼不考慮使用System.Windows.Forms.ToolStrip而不是MenuStrip中。這可以讓你擁有內置的箭頭功能,甚至可以解決你遇到的問題。

如果您想要,您可以指定tooltrip項目不顯示圖像並僅顯示文本。通過這種方式,您幾乎可以完全模仿菜單欄的功能,但可以免費獲得「下拉箭頭」。

0

我能一起破解這是一個解決方案,但我還是想少鈍的東西:

protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e) 
{ 
    base.OnRenderItemText(e); 
    if (e.Item.GetType() == typeof(ToolStripMenuItem)) 
    { 
     ToolStripMenuItem tsmi = (ToolStripMenuItem)e.Item; 
     if (tsmi.HasDropDownItems && tsmi.OwnerItem == null) 
     { 
      Rectangle bounds = tsmi.Bounds; 
      bounds.X = bounds.Right - 25; 
      bounds.Width = 25; 
      bounds.Y = 0; 
      ToolStripArrowRenderEventArgs tsarea = new ToolStripArrowRenderEventArgs(
       e.Graphics, 
       e.Item, 
       bounds, 
       e.TextColor, 
       ArrowDirection.Right); 
      OnRenderArrow(tsarea); 
     } 
    } 
} 
相關問題