2010-05-06 4 views
29

Zauważyłem, że dodanie MenuStrip (z Zestawu narzędzi) do mojego projektu formularza nie powoduje paska menu podobnego do tego, które widziane jest w wielu natywnych aplikacjach systemu Windows. Zamiast tego otrzymuję pasek menu podobny do Visual Studio. Żadne ustawienia stylu dla MenuStrip nie wydają się naśladować znacznie bardziej powszechnego natywnego paska menu.Standardowe paski menu systemu Windows w Windows Forms

Czy istnieje sposób dodania paska menu do mojej aplikacji Windows Forms, który wygląda tak samo, jak w Notatniku, Menedżerze zadań i innych? (Najlepiej z projektantem, ale nie przeszkadza dodanie go programowo albo.)

zrzut ekranu dla ilustracji:

+1

Co to jest, że inaczej niż w menu znaleźć w notatniku lub Windows Explorer? Jest bardzo podobny do tego znalezionego w biurze 2003, więc nie jest niczym niezwykłym. –

Odpowiedz

46

To jest łatwe.

Przejdź do skrzynki narzędziowej, kliknij prawym przyciskiem myszy w dowolnym miejscu i wybierz "Wybierz elementy". Gdy okno dialogowe zostanie załadowane i pojawi się, przewiń w dół, aż zobaczysz Menu główne. Dodaj to do zestawu narzędzi, a masz własny pasek menu!

Szczęśliwe kodowanie!

+3

Wow, nie miałem pojęcia, że ​​mogę dodać coś do mojego Toolboxa w ten sposób. Wielkie dzięki! – BoltClock

+0

Nie ma za co. Chętnie pomogłem. :) –

+5

Nie wiedziałem o tym komponencie. Dałam mu szansę i ma * bardzo * ograniczony: nie mogłem zmienić koloru w projektancie, nie ma wsparcia dla lokalizacji, żadnych obrazów itp. Jeśli tego chcesz, idź do niego. Nie * istnieją * powody, dla których zostało to zastąpione przez MenuStrip. –

3

normalnie ustawić MenuStrip za RenderMode do System co daje minimalistyczny, jeden kolor menu (bez gradientów lub czegoś takiego dekadenckiego).

Jeśli to nie wystarczy, prawdopodobnie będziesz musiał przeskakiwać przez obręcze niskiego poziomu, aby uzyskać to, czego chcesz.

18

Można to zrobić poprzez ustawienie formularza za Menu własności, podobnie jak to:

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.Menu = new MainMenu(); 
     MenuItem item = new MenuItem("File"); 
     this.Menu.MenuItems.Add(item); 
      item.MenuItems.Add("Save", new EventHandler(Save_Click)); 
      item.MenuItems.Add("Open", new EventHandler(Open_Click)); 
     item = new MenuItem("Edit"); 
     this.Menu.MenuItems.Add(item); 
      item.MenuItems.Add("Copy", new EventHandler(Copy_Click)); 
      item.MenuItems.Add("Paste", new EventHandler(Paste_Click)); 
     // etc ... 
} 

private void Save_Click(object sender, EventArgs e) 
{ 
    // save 
} 

tych menu będzie wyglądać „normalnych” menu systemu.

Nie mogłem jednak znaleźć żadnego wsparcia projektanta. W mojej obronie nie próbowałem naprawdę ciężko.

+0

Jest to łatwiejsze rozwiązanie. Można go znaleźć w oknie "Wybierz przedmioty". Komponent nazywa się "MainMenu" i ma również wsparcie dla Projektanta Form. –

+0

To jest świetna odpowiedź. To może nie być tak proste i przyjazne jak korzystanie z projektanta, ale nie jest warte spadku. – BoltClock

+0

Zgadzam się. To jest świetna odpowiedź i przyda się, gdy pracuję nad projektami na komputerach, które nie mają zainstalowanego IDE! Po prostu starałem się przegłosować, ale jest napisane, że pytanie jest zbyt stare i nie mogę głosować, dopóki pytanie nie zostanie zredagowane, co? –

7

Zamiast używać komponentu MainMenu, można utworzyć własny mechanizm renderujący dla komponentu MenuStrip. Zaletą jest możliwość dodawania obrazów do obiektów MenuStripItem. Oto pastebin dla niestandardowego renderowania:

NativeRenderer

Istnieją różne motywy, które mogą być zastosowane w konstruktorze renderującego. Wypróbuj je wszystkie, aby zobaczyć natywne motywy. Aby skorzystać z tej renderujący po prostu ustawić instancji do właściwości MenuStrip Renderer:

menuStrip.Renderer = new NativeRenderer([theme]); 
+1

Ooh, to wygląda na użyteczne! Jeśli w końcu go wykorzystam (przeniosłem się na [bardziej zielone pastwiska] (http://msdn.microsoft.com/en-us/library/ms754130.aspx)), bardzo chciałbym źródło. Czy jest to domena publiczna? :) – BoltClock

+0

Przepraszam BoltClock, nie czaiłem się tu od jakiegoś czasu. Próbowałem znaleźć oryginalnego autora (został opublikowany gdzieś na stronie code.google.com). Wstawię oryginalny link, gdy go znajdę. –

+0

@BoltClock Znalazłem to! Podaj cały ten geniusz: http://code.google.com/p/szotar/source/browse/trunk/Client/Szotar.WindowsForms/Base/NativeToolStripRenderer.cs –