WinForms ContextMenu'ye bir ayırıcı nasıl eklenir?


103

Kontrolümün içinde:

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"));

Bu ContextMenu'ye bir ayırma çizgisi nasıl eklenir?


İsimlerin önündeki '&' işareti ne işe yarar?
Gerben Limburg

3
@GerbenLimburg: '&' , kullanıcıya sunulacak (Alt ile birlikte) kısayol tuşunu (" anımsatıcı " olarak adlandırılır ) tasarlamanıza izin verir .
Otiel

Yanıtlar:


225

Bunun sadece bir çizgi olduğuna inanıyorum:

ContextMenu.MenuItems.Add("-");

Bu, Windows'ta yetersiz şekilde belgelenmiş birçok öğeden biridir. Bunu birkaç ay önce yapmam gerekiyordu. Bunu Win32'de yapabileceğimi hatırladım, ancak sözdizimini hatırlayamadım. Bulmak için bazı eski VC ++ 6 dosyalarını açtım. Bu arada, bazı şeyler için hala ara sıra "Petzold Kitabı" na başvuruyorum. Vay canına, kendimi yaşlı hissediyorum ...
Brad Bruce

24
Elbette bu daha okunabilirdir, Gabriel'in cevabınaContextMenu.Items.Add(new ToolStripSeparator()); bakınız
MarkJ

9
@MarkJ, ContextMenu artık bir Öğeler özelliğine sahip değil. ToolStripSeperator (), ContextMenu.Items.Add () için de geçerli bir bağımsız değişken değildir.
Cypher

3
Bunu, Visual Studio Windows Form tasarımcısında menü tasarımcısının "Buraya yazın" giriş alanına kısa çizgiyi girerek görsel olarak yapabileceğinizi unutmayın. Ayırıcı, tasarımcıda hemen görünecektir.
Buggieboy

48

Bu, çizgi kadar iyi çalışıyor ve Winforms'un kısa çizgiyi bir ToolStripSeparator'a çevireceğinden şüpheleniyorum. Bence bu çözüm, kodu korumak zorunda olan herkes için daha açık.

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

5
.Net 2 winforms ContextMenu sınıfının Items özelliği yoktur.
AndrewS

6
Bu yalnızca bir ContextMenuStrip ile mümkündür, bir ContextMenu ile mümkün değildir.
Gerben Limburg

1
Ve yapabilirsin yourContextMenu.Items.Insert(3, new ToolStripSeparator());, ama Insertçizgi "-" yapamazsın .
Otiel

1
Mükemmel Çok teşekkürler
Garuda Prasad K


7

Tasarımcı kullanıyorsanız, menü öğelerinizi adlandırdığınız şekilde metin olarak tek bir tire "-" yerleştirin. Enter tuşuna bastıktan sonra ayırıcı oluşturulacaktır.



1

Yatay ayırıcılar harikadır, ancak bunun yerine dikey bir ayırıcı istiyorsanız ne olur?

Pekala, endişelenme - bir tane alabilirsin!

Set BarBreakiçin özellik trueüzerinde MenuItemhangi seperatör sonra ilk biri olmalıdır:

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

görüntü açıklamasını buraya girin

Bir öğeyi eklemek için MenuItemskoleksiyon: yourContextMenu.MenuItems.Add(item).


0

Belki de Visual Studio'nun sonraki sürümlerinde bunu daha basit hale getirdiler. VS 2012 kullanıyorum. Form tasarımcısı aracılığıyla bir ayırıcı ekleyebilirsiniz. 1) MenuStrip seçin / oluşturun. 2) "Buraya Yazın" üzerinde sağ fare. 3) "Ekle" yi seçin. 4) "Ayırıcı" seçin. 5) Yeni ayırıcıyı yukarıda olmasını istediğiniz metne sürükleyin. Bitti.


0

ContextMenusahip bir kurucu bir dizi alan MenuItemnesneler. Söylemeye gerek yok, bu diziye bir dizge ekleyemezsiniz. Bununla birlikte, bir ekleyerek ayırıcı alabilirsiniz new MenuItem("-"):

    var contextMenu = new ContextMenu(new[]
    {
        timerMenuItem,
        keypressMenuItem,
        new MenuItem("-"), // Seperator
        new MenuItem(text: "Exit", onClick: (sender, args) => Application.Exit())
    });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.