3

我試圖建立一個ToolStripMenuItem的檢查列表,它自動處理一個項目的檢查和取消選中,然後我向程序員提供一個事件,允許他們處理接下來會發生的事情。如果這樣的事情已經存在,我很樂意知道它在哪裏。我爲我的自定義ToolStripMenuItem創建了收藏夾編輯器,並且我可以將檢查列表添加到此收集清單中。我的問題是您創建集合編輯器這樣的:傳遞一個對象到一個集合編輯器

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), 
Editor(typeof(ToolStripItemExtCollectionEditor), typeof(UITypeEditor))] 

我需要能夠對這個ToolStripMenuItemDropDownitems傳遞給該集合編輯器,所以當你添加一個新的清單,然後按一下清單的項目屬性您可以在清單中添加/刪除任何一個已知ToolStripMenuItem。傳遞引用不起作用,因爲所有這些都發生在屬性內部,如果答案是反射,我不知道從哪裏開始。

+0

從哪裏開始:在你的'ToolStripItemExtCollectionEditor'類中設置一些斷點並檢查你到達的值。 – 2014-09-10 15:05:25

+0

到目前爲止我發現的是選擇組件啓動對集合編輯器的構造函數的調用,並打開集合CreateNewItemTypes()被調用。有沒有辦法讓我調試我的設計師?如果我能夠做到這一點,我可能會看到誰在調用屬性構造函數。 – Luminous 2014-09-10 15:43:49

+0

也許你可以啓動VS的第二個實例,並將調試器連接到它。我知道這適用於Expression Blend。 – Dirk 2014-09-10 15:48:58

回答

0

此答案適用於VB.NET。我計劃變成C#這一個DLL,但現在它在vb.net,因爲那是我從開始這個想法和語言的項目是

這裏是我到目前爲止:

ToolStripMenuItemExt

目的:我的自定義ToolStripMenuItem

ToolStripMenuItemExt有一個CheckListSheet其中包含ToolStripMenuItemExt的DropDownItems(我通過dropdownitems byref而不是byval傳入)的引用。它有一個屬性返回CheckListSheet中的CheckLists對象。

CheckListSheet

目的:保持對我通過觀察集合式觀察採集和收集我ToolStripMenuItemExt返回一個對象的引用。

CheckListSheetCheckLists對象。我通過byref傳遞的下拉項存儲在ObservableToolStripItemCollection中,希望當我進行測試時,它允許我更容易地更新清單的集合,因爲它繼承了ObservableCollection(of ToolStripItemCollection)。這個類還有一個共享函數,它返回具有私有共享範圍標識符的可觀察集合。

清單

目的:存儲CheckList對象CollectionBase類型。

覈對表

用途:存儲其對象作爲一個單一的項目檢查清單(只有一個項目在一個時間檢查)的ToolStripItemCollection

這對設計師和檢查列表的集合有一些屬性。最終我會添加邏輯來檢查並自動取消選中併爲其啓動一個事件。

MenuItemCheckListCollectionEditor

用途:允許的已知的集合,並且實例化ToolStripItem對象被顯示,並加入到一個CheckList

現在它要求我給它一個類型或數組的類型,因此它可以建立它自己的什麼類型CollectionEditor。我無法顯示類型的下拉列表或下拉對象的下拉列表。任何名稱中都有ToolStrip的類繼承ToolStripItem,這就是我使用這種類型的對象的原因。

如果ANYONE對我目前的答案的任何意見或預測可以任何可預見的陷阱,請分享。我不在乎你是用c#還是vb.net進行交流。也許我只需要停下來,把它變成C#代碼。也許這是不可能的。儘管我正在取得進展。什麼是非常有幫助的是搞清楚的MenuStrip的集合編輯器如何能夠填充ToolStripItems

的下拉

[更新]

集合編輯器需要你提供一個類型,它顯示。此類型必須繼承CollectionBase,這意味着在設計時無法引用下拉項。 :感嘆:

相關問題