Lucrul cu menustrip și contextmenustrip Andrew Troelsen

Lucrul cu MenuStrip și ContextMenuStrip

• ToolStripMenuItem - meniu tradițional.

• ToolStripComboBox - construit element de ComboBox (combo box).

• ToolStripSeparator - o simplă linie care separă conținutul.

• ToolStripTextBox - un element încorporat al TextBox (caseta de text).

Din punctul de vedere al programatorului, controlul MenuStrip conține o colecție ToolStripItemCollection puternic tastat. Ca și alte tipuri de colecții, acest obiect suportă metode Adaugă (), AddRange (), Remove () și Contele de proprietate. Această colecție nu este de obicei completat în mod direct, ci printr-o varietate de moduri de instrumente de proiectare, dar dacă este necesar, este posibil să-l proceseze manual.

Pentru a da un exemplu de utilizare a controlului MenuStrip, a crea o nouă aplicație Windows Forms numit MenuStripApp. Se pune controlul MenuStrip la forma în fereastra de proiectare, oferindu-i mainMenuStrip numele. Ca urmare, fișierul * .Designer.cs a adăugat o nouă variabilă.

System.Windows.Forms.MenuStrip mainMenuStrip privat;

Lucrul cu menustrip și contextmenustrip Andrew Troelsen

• Se introduce un meniu "standard" de sistem (fișiere, Salvare, Instrumente, Help, etc.) folosind link-ul Elemente Insert standard (elemente standard Insert).

• Schimbarea comportamentului de andocare MenuStrip.

• Editare orice element MenuStrip (este doar o „alternativă rapidă“, în ceea ce privește alegerea acelui element special în fereastra de proprietăți).

Lucrul cu menustrip și contextmenustrip Andrew Troelsen

Fig. 19.12. Crearea unui sistem de meniu

Notă. Probabil știți că un simbol ampersand (), situat în fața literei în elementul de bara de meniu, setează comanda rapidă de tastatură pentru un acces rapid la acest articol. În acest exemplu este indicat File, Exit, astfel încât utilizatorul poate activa meniul Exit apăsând mai întâi , apoi .

Fiecare element ați introdus meniul în modul de proiectare, acesta este tipul de clasa ToolStripMenuItem. După ce deschideți fișierul * .Designer.cs, veți vedea, există noi variabile pentru fiecare dintre elementele de intrare.

MainWindow clasa parțială

System.Windows.Forms.MenuStrip mainMenuStrip privat;

System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem privat;

System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem privat;

InitializeComponent void privat ()

this.menuStrip1.Items.AddRange (nou System.Windows.Forms.ToolStripItem [] );

this.fileToolStripMenuItem.DropDownItems.AddRange (nou System.Windows.Forms.ToolStripItem [] );

În cele din urmă (nu mai puțin importantă), se adaugă un control MenuStrip la controalele formă de colectare. Această colecție va fi discutată în detaliu în capitolul 21, și este important de remarcat faptul că un control pot fi vizibile în timpul rulării, numai în cazul în care acest element este prezent în colecția menționată.

Pentru a finaliza crearea codului de exemplul nostru, du-te înapoi la vizualizarea de proiectare și urmează prelucrarea petei eveniment pentru Exit element de meniu, folosind butonul Evenimente din fereastra Properties. În tratare a evenimentului a generat, face ApplicationExit provocare.

privat void exitToolStripMenuItem_Click (expeditor obiect, EventArgs e)

Acum puteți compila și rula programul. Verificați dacă puteți închide aplicația atât prin selectarea File, Exit din meniu sau prin apăsarea , apoi de pe tastatură.

Adăugarea Textbox elementului MenuStrip

Să creeze un nou element este cel mai înalt nivel al meniului, atribuind acest nume element de schimba culoarea de fundal. Element Subordonate în acest meniu nu va fi un element de meniu, și elementul ToolStripTextBox (fig. 19.13). Adăugarea de control nou, schimba numele toolStripTextBoxColor folosind fereastra de Proprietăți.

Scopul nostru este posibilitatea unui utilizator pentru a selecta culori (roșu, verde, roz, etc). care va stabili valoarea pentru forma de proprietate BackColor. În primul rând tratează evenimentul LostFocus pentru noul membru. ToolStripTextBox in cadrul formularului de proiectare (acest eveniment are loc atunci când TextBox în ToolStrip încetează să mai fie un element de interfață activă).

toolStripTextBoxColor.LostFocus + = new EventHandler (toolStripTextBoxColor_LostFocus);

Lucrul cu menustrip și contextmenustrip Andrew Troelsen

Fig. 19.13. Adăugarea TextBox în MenuStrip

În tratare a evenimentului a generat, citi datele introduse în șir ToolStripTextBox (folosind proprietățile textului), și de a folosi metoda de sistem. Drawing.Color.FromName (). Această metodă statică returnează tipul de culoare, șirul corespunzător unei valori cunoscute. Pentru a ține cont de un utilizator pentru a introduce o culoare necunoscută (sau orice alte date nepotrivite) folosește o logică simplă try / catch.

void toolStripTextBoxColor_LostFocus (expeditor obiect, EventArgs e)

> captură <>// Doar ignora datele incorecte.

Crearea de meniuri contextuale

Considerăm acum procedura pentru construirea unui meniu sensibile la context (de exemplu, meniu, picătură făcând clic pe butonul din dreapta al mouse-ului). Clasa folosit pentru a construi meniuri contextuale în .NET 1.1. A fost o clasă ContextMenu, dar NET 2.0 este preferat tip ContextMenuStrip. Ca tip MenuStrip, tip ContextMenuStrip suportă ToolStripItemCollection pentru a reprezenta toate elementele de meniu (ToolStripMenuItem, ToolStripComboBox, ToolStripSeparator, ToolStripTextBox etc.).

Lucrul cu menustrip și contextmenustrip Andrew Troelsen

Fig. 19.14. Crearea unui ContextMenuStrip

Acest meniu contextual este proiectat pentru a permite utilizatorului să selecteze o dimensiune a fontului pentru ca mesajul să fie afișat în formularul clientului. Pentru a simplifica sarcina dumneavoastră, creați o listă a tipului de TextFontSize din cadrul MenuStripApp spațiu de nume și să declare o nouă variabilă membru al acestui tip în cadrul formularului (setarea TextFontSize.FontSizeNormal valoare variabilă).

// Lista Auxiliar de dimensiunea fontului.

MainForm public class: Forma

privat TextFontSize currFontSize = TextFontSize.FontSizeNormal;

Următorul pas este de a procesa evenimentele forma Paint folosind fereastra de Proprietăți. Așa cum va fi arătat în capitolul următor, eveniment de vopsea poate afișa datele grafice în zona de client a formularului (inclusiv textul în stilul respectiv). În acest caz, avem de a afișa un mesaj text utilizând un utilizator specificat dimensiunea fontului. Nu vă faceți griji cu privire la detaliile încă, modificați de tratare a evenimentelor de vopsire așa cum este specificat mai jos.

MainWindow_Paint privat void (expeditor obiect, PaintEventArgs e)

Grafica g = e.Graphics;

g.DrawString ( "Click aici pentru butonul din dreapta al mouse-ului ...", font nou ( "Times New Roman", (float) currFontSize), noi SolidBrush (Color.Black), 50, 50);

În cele din urmă, necesitatea de a gestiona clic eveniment pentru fiecare dintre tipurile de ToolStripMenuItem sprijinit componenta ContextMenuStrip. Este posibil, desigur, să aibă un handler separat pentru clicul eveniment pentru fiecare dintre tipurile, dar subliniem un handler eveniment care va fi apelat atunci când utilizatorul face clic pe oricare dintre cele trei elemente ToolStripMenuItem. Utilizând fereastra Properties, setați numele handler clic pe Eveniment ContextMenuItemSelection_Ciicked pentru toate cele trei tipuri de ToolStripMenuItem și punerea în aplicare a metodei corespunzătoare așa cum este prezentat mai jos.

privat void ContextMenuItemSelection_Clicked (expeditor obiect, EventArgs e)

// Get element de ToolStripMenuItem

// în cazul în care se face un clic.

ToolStripMenuItem miClicked = (ToolStripMenuItem) expeditor;

// Căutați un element pe care a făcut clic pe numele său.

if (miClicked.Name == "hugeToolStripMenuItem") currFontSize = TextFontSize.FontSizeHuge;

if (miClicked.Name == "normalToolStripMenuItem") currFontSize = TextFontSize.FontSizeNormal;

if (miClicked.Name == "tinyToolStripMenuItem") currFontSize = TextFontSize.FontSizeTiny;

// Setați formularul pentru a reîmprospăta vizualizarea.

Vă rugăm să rețineți că utilizarea argumentului expeditor pentru a determina numele variabilei-membru ToolStripMenuItem, pentru a seta dimensiunea textului. După acest apel invalidează () generează evenimentul Paint, ceea ce va cauza de tratare a evenimentului Paint.

Ultimul pas este de a informa forma unei ContextMenuStrip de celule care urmează să fie afișat atunci când faceți clic-dreapta în zona de client. Pentru a face acest lucru, folosind fereastra de Proprietăți, setați valoarea proprietății ContextMenuStrip la numele elementului de meniu contextual. După aceea, următoarea linie apare în contextul InitializeComponent ().

Dacă executați aplicația acum, puteți modifica dimensiunea mesajului text afișat făcând clic pe butonul din dreapta al mouse-ului.

Notă. Cu contextul proprietății MenuStrip din meniul contextual poate include orice control. De exemplu, în cazul în meniul contextual al casetei de dialog pentru a crea un buton de obiect (buton), apoi elementul de meniu corespunzător este afișat numai atunci când un clic se face în butoanele spațiul de lucru.

Verificarea stării elementelor de meniu

Termeni ca ToolStripMenuItem vă permit să verificați starea unui element de meniu, pentru a face disponibil sau ascunse. Tabel. 19.11 sunt descrieri ale unora dintre cele mai interesante caracteristici ale acestui tip.

Tabelul 19.11. Termeni ca ToolStripMenuItem