none
請教如何在 ContextMenuStrip 中動態加入項目 RRS feed

  • 問題

  • 各位好, 我想請教一個問題

    我有一個ContextMenuStrip, 我想要在程式執行後, 插入一個項目

    如果我使用 cmtSubMenu.Items.Add("aaa",image,addressof ) 則項目它會加到最後
    所以我使用 cmtSubMenu.Items.Insert

    我的做法是
    Dim a As New ToolStripItem
    cmtSubMenu.Items.Insert(1, a)
    但是, 這樣做會出現  " New 不可以使用在宣告為MustInherit的類別上 " 這個錯誤
    我應該要如何做, 才可以動態加入選單項目, 同時宣告定義這個項目的Click事件呢 ?
    感謝前輩指導






    2009年4月17日 下午 02:15

解答

  • HI,

    您不可以建立ToolStripItem類別的物件, 因為ToolStripItem類別是抽象類別, 但是您可以建立ToolStripMenuItem類別的物件, 例如:
    ToolStripMenuItem ti=new ToolStripMenuItem("Menu2");
    cmtSubMenu.Items.Insert(0, ti);

    就可以在執行階段加入功能表到ContextMenuStrip了
    • 已標示為解答 vitoshao 2009年4月19日 下午 03:28
    2009年4月19日 上午 03:17

所有回覆

  • ContextMenuStrip 類別
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.contextmenustrip.aspx


    參考以上,您可以把原本的Items.Item(i).Text取出來,做個排序,先Clear,再一個個Add回去,這樣可行嗎?
    • 已編輯 Joe Hung 2009年6月2日 下午 02:23
    2009年4月19日 上午 12:43


  • 我目前的做法, 是把所有可能用到的項目, 在BaseForm的DesignTime就先做好, 並把[非共用的項目]設定Visible=False
    之後在繼承表單的Form_Load時, 再把要用的[非共用項目]設成Visible, 但這樣做, 總感覺怪怪的

    另外, 不懂的是, 查Insert的宣告是
    Public Sub Insert ( index As Integer, value As ToolStripItem )
    為什麼不能直接 new 一個 ToolStripItem , 再呼叫Insert就好呢?
    2009年4月19日 上午 02:31
  • 我想, 我知道原因了,
    因為 ToolStripItem只是一個抽象基底類別, 所以不可以這樣用
    我應該New一個ToolStripMenuItem
    然後像這樣用
    Dim a As New ToolStripMenuItem
    a.Image = My.Resources.test
    a.Text = "test" AddHandler a.Click, AddressOf Test
    mySubMenu.Items.Insert(2, a)
    2009年4月19日 上午 02:52
  • HI,

    您不可以建立ToolStripItem類別的物件, 因為ToolStripItem類別是抽象類別, 但是您可以建立ToolStripMenuItem類別的物件, 例如:
    ToolStripMenuItem ti=new ToolStripMenuItem("Menu2");
    cmtSubMenu.Items.Insert(0, ti);

    就可以在執行階段加入功能表到ContextMenuStrip了
    • 已標示為解答 vitoshao 2009年4月19日 下午 03:28
    2009年4月19日 上午 03:17