2012-01-05 21 views
1

必要に応じて、子メニューを添付して余分なメニュー項目を追加できるコンテキストメニューを作成しようとしています。私はそれをやろうとしていますので、各パーツを別々のクラスに分けて、オブジェクトをうまく書くことができます。c#オブジェクト型変換

私が抱えている問題は、ContextMenuStripのAddRangeメソッドにオブジェクトを処理するコンストラクタがないことです。私はそれがないと思ったので、働いていない演算子でToolStripMenuItem型に変換しようとしました。

私はこれが達成できると確信していますので、私は間違って何かを考えたと思います。これを回避する方法はありますか、現在の構造化で壁に向かって私の頭を禁止していますか? SystemObject newObject = (SystemObject)myObjectのように、これらの二つのタイプが相互に何らかの関係を持っている必要があります、別のタイプにあなたのオブジェクトを変換するために

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace Context 
{ 
class TestMenu 
{ 
    public TestMenu() 
    { 
     ContextMenuStrip filesToUploadContext = new System.Windows.Forms.ContextMenuStrip(); 

     // Hot Folder Header 
     ToolStripMenuItem hotHead = new System.Windows.Forms.ToolStripMenuItem(); 
     // Holder for files in Hot Folder 
     ParentItem hotFile; // foreach 

     // Dropped Files Header 
     ToolStripMenuItem dropHead = new System.Windows.Forms.ToolStripMenuItem(); 
     // Holder for files that have been dragged and dropped in 
     ParentItem dropFile; // foreach 

     ToolStripSeparator toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); 
     ToolStripSeparator toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); 

     filesToUploadContext.Items.AddRange(new ToolStripItem[] { 
      hotHead, 
      toolStripSeparator1, 
      hotFile, // Not a toolStrip item 

      dropHead, 
      toolStripSeparator2, 
      dropFile // also not a toolStrip item 
      }); 

     //// Testing stuff vv 
     //// Hot Folder 
     //hotFile.DropDownItems.AddRange(new ToolStripItem[] 
     // { 
     //  viewHot, 
     //  deleteHotFile 
     // }); 

     //// Dropped Items Folder 
     //dropFile.DropDownItems.AddRange(new ToolStripItem[] 
     // { 
     //  viewDrop, 
     //  removeDropFile 
     // }); 

     //// Hot Folder Section Heading 
     //hotHead.Name = "hotHead"; 
     //hotHead.Text = "Hot Folder Files"; 
     //hotHead.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); 

     //// Drop Folder Section Heading 
     //dropHead.Name = "dropHead"; 
     //dropHead.Text = "Dropped Files"; 
     //dropHead.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); 
    } 

    class ParentItem 
    { 
     // MenuItem to be used for found files 
     // Options will contain child items 
     public ToolStripMenuItem name = new ToolStripMenuItem(); 
     public ChildMenu options { get; set; } 
     public ParentItem(); 
    } 

    class ChildMenu 
    { 
     // Options available for specific files at end of menu tree 
     public ToolStripMenuItem view = new ToolStripMenuItem("View File"); 
     public ToolStripMenuItem delete = new ToolStripMenuItem("Delete File"); 
     public ToolStripMenuItem remove = new ToolStripMenuItem("Remove File"); 
     public ChildMenu(); 
    } 

} 

}

+1

コードは大変ですが、動作しない行はどこにありますか? –

答えて

1

を、ToolStripMenuItemに関係なくAddRangeおよびオブジェクトを使用する方法を探して。

ChildMenuParentItemクラスを継承しようとしないでください。ToolStripMenuItemです。 ToolStripMenuItemsを追加してこれらのクラスを削除してください。

EDIT

私は、次のような何かをするだろう(実際にコンパイルされます):あなたのファイルのそれぞれについて、次に

public void PopulateMenu(string fileName, ContextMenuStrip parent) 
    { 
     ToolStripMenuItem newMenu = new ToolStripMenuItem(fileName); 
     newMenu.DropDownItems.Add(new ToolStripMenuItem("View File")); 
     newMenu.DropDownItems.Add(new ToolStripMenuItem("Delete File")); 
     newMenu.DropDownItems.Add(new ToolStripMenuItem("Remove File")); 

     parent.Items.Add(newMenu); 
    } 

this.PopulateMenu(the_file_name, the_parent_menu); 

はまた、忘れてはいけませんあなたのメニューのClickイベントにハンドラを添付すると、役に立たなくなります;-)

+0

Kenさん、ありがとう、とても助かりました! – negligible

0

。状況に応じて、彼らは共通のInterfaceを持つか、またはある種の祖先を持つことができます(たとえば、あなたのタイプが他のタイプのタイプinheritsの場合)。

特定の例では、オブジェクトはToolStripMenuItemオブジェクトから継承して1に変換する必要があります。

私はそれがより良いニュースではありません申し訳ありませんが、私はそれはしかし、あなたに少しを助けるかもしれない願っています:)

私の答え

を再読で私は卵を吸うために、あなたを教え、あなたかもしれない実現「再実際にあなたがToolStripMenuItemの子としてToolStripMenuItemよりも何か他のものを追加することができないされる場合がありますので、私の謝罪を受け入れてください:)

関連する問題