WinForms ContextMenuにセパレーターを追加する方法は?


103

私のコントロールの中に、私は持っています:

ContextMenu = new ContextMenu();
ContextMenu.MenuItems.Add(new MenuItem("&Add Item", onAddSpeaker));
ContextMenu.MenuItems.Add(new MenuItem("&Edit Item", onEditSpeaker));
ContextMenu.MenuItems.Add(new MenuItem("&Delete Item", onDeleteSpeaker));
ContextMenu.MenuItems.Add( ??? );
ContextMenu.MenuItems.Add(new MenuItem("Cancel"));

このContextMenuに分離線を追加する方法は?


名前の前の「&」の使用は何ですか?
Gerben Limburg

3
@GerbenLimburg:「&」を使用すると、ユーザーが使用できるショートカットキー(「ニーモニック」と呼ばれます)を設計できます(Altと組み合わせて)。
Otiel 2012

回答:


225

私はそれがダッシュだと信じています:

ContextMenu.MenuItems.Add("-");

これは、Windowsで十分に文書化されていない多くの項目の1つです。数か月前にこれを行う必要がありました。Win32でもできることを思い出しましたが、構文を思い出せませんでした。私はそれを見つけるためにいくつかの古いVC ++ 6ファイルをプルしてしまいました。ちなみに、私はまだ時々「ペッツォルド・ブック」を参照することがあります。うわー、私は古く感じています...
ブラッドブルース

24
確かにこれはもっと読みやすいですガブリエルの答えをContextMenu.Items.Add(new ToolStripSeparator()); 参照してください
MarkJ '18

9
@ MarkJ、ContextMenuにはItemsプロパティがなくなりました。ToolStripSeperator()も、ContextMenu.Items.Add()の有効な引数ではありません。
Cypher

3
Visual Studio Windowsフォームデザイナのメニューデザイナの[ここに入力]入力フィールドにハイフンを入力すると、視覚的にこれを実行できることに注意してください。セパレーターはデザイナーにすぐに表示されます。
Buggieboy 2013年

48

これはダッシュと同じように機能し、WinformsはダッシュをToolStripSeparatorに変換すると思われます。このソリューションは、コードを保守する必要がある人にとってはより明白であると私は思います。

yourContextMenu.Items.Add(new ToolStripSeparator());

5
.Net 2 winforms ContextMenuクラスには、Itemsプロパティがありません。
AndrewS 2012

6
これは、ContextMenuStripでのみ可能であり、ContextMenuではできません。
Gerben Limburg、2012

1
できyourContextMenu.Items.Insert(3, new ToolStripSeparator());ますがInsert、ダッシュ「-」は使用できません。
Otiel 2014

1
どうもありがとうございました
ガルーダプラサードK


7

Designerを使用している場合は、メニュー項目に名前を付けるのと同じ方法で、ハイフン「-」を1つテキストとして配置します。Enterキーを押すと、セパレータが作成されます。



1

水平セパレーターはクールですが、代わりに垂直セパレーターが必要な場合はどうでしょうか。

まあ、心配しないでください-あなたはそれを持つことができます!

BarBreakプロパティをtrueに設定します。MenuItemこれは、セパレータの後の最初のプロパティにする必要があります。

var item = new MenuItem(text: "Settings", onClick: SomeFunction) { BarBreak = true };

ここに画像の説明を入力してください

アイテムをMenuItemsコレクションに追加するには:yourContextMenu.MenuItems.Add(item)


0

おそらくそれ以降のバージョンのVisual Studioでは、これがより簡単になりました。VS 2012を使用しています。フォームデザイナを使用してセパレータを追加できます。1)MenuStripを選択/作成します。2)「ここに入力」で、右マウス。3)「挿入」を選択します。4)「セパレータ」を選択します。5)新しいセパレータを上に配置したいテキストにドラッグします。できました。


0

ContextMenu有するコンストラクタの配列受けるMenuItemオブジェクトを。言うまでもなく、その配列に文字列を追加することはできません。ただし、次を追加することでセパレータを取得できますnew MenuItem("-")

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.