2012-01-12 5 views
5

複数の列を持つコンテキストメニューを作成したいとします。基本的にはこのように行くだろう:.NET Windowsフォームで複数列のコンテキストメニューを作成できますか?

First item | [common option] | All Options > 
Second item | [common option] | All Options > 
Third item | [common option] | All Options > 
Fourth item | [common option] | All Options > 

だから、基本的には(実行時に生成された)アイテムの束があり、各項目は、独自に起動することができます。または一般的に使用されるオプションを使用します。または可能なすべてのオプションを含むサブメニューを表示することができます。

どうすればいいですか?私はContextMenuStripContextMenuの両方を悪用しようとしていますが、そのようなオプションはないようです。それでも私はどこか複数の列のメニューを見たことを思い出しているようです...

私はWPFの経験がないので、私はWindowsフォームソリューションを好むでしょう。ああ、このコンテキストメニューは、通知領域(別名シストレイ)のアイコンをクリックすると開きます。

答えて

5

完全に.NETコードで構築されたメニューであるContextMenuStripについてはわかりませんが、これはネイティブシステムメニューのラッパーであるContextMenuで確実に実行できます。それぞれMenuItem.BreakMenuItem.BarBreak

キーはMenuItem classラッパーのプロパティとして公開されている個々のメニュー項目(S)のためMFT_MENUBREAK又はMFT_MENUBARBREAKフラグを設定されています。

前者はメニュー項目を新しい列に置き、後者は項目を新しい列に置き、列をエッチングされた縦線で区切ります。 MSDNの例から

public void CreateMyMenus() 
{ 
    // Create three top-level menu items. 
    MenuItem menuItem1 = new MenuItem("&File"); 
    MenuItem menuItem2 = new MenuItem("&New"); 
    MenuItem menuItem3 = new MenuItem("&Open"); 

    // Set the BarBreak property to display horizontally. 
    menuItem2.BarBreak = true; 
    menuItem3.BarBreak = true; 

    // Add menuItem2 and menuItem3 to the menuItem1's list of menu items. 
    menuItem1.MenuItems.Add(menuItem2); 
    menuItem1.MenuItems.Add(menuItem3); 
} 
0

WinFormsのメニューは、ツリーのようにしか作成できません。各項目の下にサブメニューを表示することができます。したがって、共通オプションをサブメニューの最初の項目として配置することができます。

独自のコントロールを設計しないと(WPFがこのタスクにはるかに適していますが、WPFは学習に多くの時間がかかります)

+0

まあ、それは大丈夫ですが、それは3列に配置されるように、私は、ツリーの最初のレベルを手配することはできませんか? 3つの項目は、配置を除いて互いに関係する必要はありません。 –

+0

いいえ、できません。 –

+2

できます。ネイティブWin32メニューはこれをうまくサポートします。さて、それは良いUIデザインは議論の余地があるかどうか、あなたは確かにWPFを使用する必要はありません。それは私がここであまりにも頻繁に見ているcop-outの答えです。 WPFを使いたくない人には*たくさんの理由があります。 –

関連する問題