Context menu na przykładzie menu myszki
Kontrolka ContextMenuStrip należy do kontrolek z grupy Manu i paski narzędzi. Ogólnie we współczesnych aplikacjach menu kontekstowe stosowane jest do obsługi funkcji związanych bezpośrednio z elementem na ekranie. Takie podejście pozwala uniknąć przeładowania opcjami głównego menu aplikacji.
Przykład użycia menu kontekstowego w systemie Windows jest wybranie ustawień ekranu po kliknięciu prawym przyciskiem myszki w obszarze pulpitu
Cel:
Utwórz aplikację zawierającą menu kontekstowe uruchamiane w obszarze formatki prawym przyciskiem myszki. Niech menu zawiera dwie funkcje: losowa zmiana koloru formularza oraz zamknięcie aplikacji.
Osadź kontrolkę ContextmenuStrip w obszarze formatki. Wybierz kontrolkę i przeciągnij myszką w obszar formatki
Wprowadź kilka próbnych tekstów elementów menu. Po kliknięciu w ikonę osadzonej kontrolki (na rysunku punkt 1) otworzy się okno dialogowe edycji elementów menu
Test widoczności menu kontekstowego
Wywołanie menu kontekstowego zrobimy po kliknięciu prawym przyciskiem myszki w obszarze formularza formatki. Wykorzystamy zdarzenie Click
Kod wywołujący menu jest bardzo prosty. Patrz poniżej
Wskazówka:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Show();
}
}
Skompiluj program i sprawdź efekt działania. Zauważysz, że menu pokazuje się w górnym lewym rogu ekranu.
Należy to poprawić. Poprawka może się kojarzyć, że należy przypisać do meny współrzędne kliknięcia myszki. Tak jednak nie jest. Należy przypisać właściciela do utworzonego menu kontekstowego, co robimy jak poniżej
Skompiluj program i sprawdź efekt działania. Teraz menu będzie pojawiać się w obszarze aplikacji
Dodajemy obsługę zdarzeń do menu kontekstowego
Dodamy dwie funkcje w utworzonym menu kontekstowym. Jedna opcja będzie zmieniać losowo kolor tła formatki. Druga opcja będzie zamykać aplikację. Patrz poniższy rysunek
Wprowadź właściwy tekst opcji menu kontekstowego, na przykład na podstawie poniższej ilustracji
Przypisz funkcje zdarzeń kliknięcia w poszczególny element menu
Ciała funkcji zdarzeń kliknięcia myszką w opcję menu odpowiednio wypełnij poniższym kodem
Wskazówka:
private void element3ToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void element1ToolStripMenuItem_Click(object sender, EventArgs e)
{
//losowy kolor
Random los = new Random();
byte skladowaCzerwona = (byte)los.Next(256);
byte skladowaZielona = (byte)los.Next(256);
byte skladowaNiebieska = (byte)los.Next(256);
this.BackColor=Color.FromArgb(skladowaCzerwona,
skladowaZielona,
skladowaNiebieska);
}
Skompiluj program i sprawdź efekt działania.
Pełny kod aplikacji
Wskazówka:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _21b_menuMyszki
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Show();
}
}
private void element3ToolStripMenuItem_Click(object sender,
EventArgs e)
{
Close();
}
private void element1ToolStripMenuItem_Click(object sender,
EventArgs e)
{
//losowy kolor
Random los = new Random();
byte skladowaCzerwona = (byte)los.Next(256);
byte skladowaZielona = (byte)los.Next(256);
byte skladowaNiebieska = (byte)los.Next(256);
this.BackColor=Color.FromArgb(skladowaCzerwona,
skladowaZielona,
skladowaNiebieska);
}
}
}