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.