2017-10-25 9 views
1

私はMenuStripとのMenuStripを持つWinFormsアプリケーションをMSVCのデザイナー経由で追加しました。ToolStripMenuItem.DropDownList文字列を介したクエリでは何も返されません

コードでは、menuItemに新しいアイテムを追加しています。それから、それをDropDownItemsコレクションで見つけようとしています。私はいくつかの方法を試しましたが、最近追加されたアイテムは見つかりませんでした。

public Form1() 
{ 
    InitializeComponent(); 

    string name = "Name"; 
    var nameItem = new ToolStripMenuItem(name); 
    menuItem.DropDownItems.Add(name); 
    menuItem.DropDownItems.Add(nameItem); 

    // query via string doesn't work 
    Debug.Assert(menuItem.DropDownItems[name] != null); // fails 
    Debug.Assert(menuItem.DropDownItems.ContainsKey(name)); // fails 
    Debug.Assert(menuItem.DropDownItems.Find(name, false).Length > 0); // fails 
    Debug.Assert(menuItem.DropDownItems.IndexOfKey(name) >= 0); // fails 

    // query via reference does 
    Debug.Assert(menuItem.DropDownItems.Contains(nameItem)); // passes 
    Debug.Assert(menuItem.DropDownItems.IndexOf(nameItem) >= 0); // passes 
} 
+1

あなたが提供するものは、その商品の名前ではなく、商品のテキストです。どのようにこれについて: 'menuItem.DropDownItems.Add("表示するテキスト ")。Name = name'。 – DonBoitnott

答えて

0

Add()に電話すると、表示するテキストを渡すか、アイテム自体を渡すことができます。それはあなたの最初のテストセットが失敗し、2番目のセットが機能する理由です。

menuItem.DropDownItems.Add(name)を使用すると、その名前は付けられていないため、名前による検索は失敗します。

menuItem.DropDownItems.Add(nameItem)を使用すると、実際のアイテムが追加され、そのアイテムのとなりました。

関連する問題