marți, 12 aprilie 2016

C#21 Meniu contextual. Hide & Show, Notify Icon

Meniul contextual se afișează la click cu  butonul din dreapta al mous-ului. Controlul folosit pentru acest tip de meniu este ContextMenuStrip.

Notify Icon este un icon care este plasat  pe System Tray în zona de notificare, în partea dreaptă, lângă ceas. Vom pune un buton de minimizare pe formă, al cărui efect este ascunderea (Hide) formei. Reafișarea (show) o vom realiza făcând dublu click pe iconul de notificare, sau, alternativ, apelând meniul contextual atașat acestui icon.


Aplicația

Vom extinde  una din aplicațiile  făcute anterior, sau vom crea o aplicație nouă, după dorință. Aducem pe formă următoarele controale: un ContextMenuStrip, un Button și un NotifyIcon. Căutăm pe internet un fișier de tip ico și îl descărcăm. Asociem acest fișier cu obiectul NotifyIcon, prin intermediul panoului Proprietăți. Selectăm referința meniului contextual (aceasta se află în subsolul ferestrei de design al formei) și creăm doi itemi: Hide și Show. Selectăm butonul Button1 și setăm textul afișat Hide sau Ascunde. Evenimentele click ale butonului Hide și al itemului Hide de pe ContextMenu  conțin doar instrucțiunea

                                  this.Hide();

Evenimentul click al itemului Show, precum si evenimentul dublu click al lui NotifyIcon1 contin instructiunea

                                   this.Visible=true;

Codul introdus este urmatorul:


         private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void hideToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void showToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Visible = true;
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            this.Visible = true;
        }



Compilăm și lansăm în execuție.

duminică, 3 aprilie 2016

C#20 RichTextBox, ToolStrip

Controlul ToolStrip 

Acest control implementează o bară de instrumente formată din mai multe butoane, butoane drop-down, comboBox-uri, liste derulante, etichete. Caracteristic acestor bare de instrumente  este faptul că au afișată pe suprafața instrumentelor (butoanelor) lor o imagine sugestivă (care la origine este un fișier de tip JPG sau GIF oarecare), scalată automat de  sistem la dimensiunea butonului, și un text auxiliar care se afișează la staționarea timp de 1 - 2 secunde a mous-ului pe sprafața butonului. Aceste butoane dublează funcțiile meniului, de aceea codul pentru evenimentul Click este același ca cel al itemului corespunzător de meniu.


Controlul RichTextBox


Acest control preia toate caracteristicile lui TextBox, și în plus oferă posibilitatea de formatare a textului (italic, bold, underline, culoare, dimensiune, font, paragraf). Caracteristic butonului este faptul că prin andocare la fereastra părinte își maximizează suprafața de lucru. Conținutul său poate fi introdus din  tastatură sau copiat dintr-un fișier RTF.

Aplicația Editor de fișiere RTF


Deschidem o aplicatie nouă, pe care o numim RichTextBoxApp. Aducem pe forma Form1 un MenuStrip, un ToolStrip, și câte un dialog din cele studiate în lecția trecută (openFile, saveFile, font și color).

Expandăm meniul la fel ca în lecția precedentă (File -Nou -Open -Save -Exit și respectiv Format-Font  - Color).

În plus, putem adăuga un nou meniu, Edit, cu itemii Copy, Cut, Paste. Modul în care putem utiliza aceste funcții îl găsim în help-ul contextual  Microsoft Visual Studio. Îndată ce  scriem în editorul de cod numele obiectului richTextBox1 și punct, sistemul ne afișează list derulantă a metodelor disponibile.

Expandăm controlul ToolStrip și generăm atâtea butoane câte ne trebuie pentru implementarea itemilor din meniu, adică 5: nou, open, save, font și color).

Căutăm în calculator sau pe internet imagini sugestive pentru asociat cu bara de instrumente. Asocierea se face prin click dreapta pe buton, apoi Set  image...

Setăm textul auxiliar care se afișează la staționarea mous-ului pe instrumente, prin setarea corespunzătoare a proprietatii Text a fiecărui instrument, din  panoul Proprietăți.

Creăm metodele handler pentru evenimentul Click al fiecărui item de meniu, apoi copiem identic în instrumentul corespunzător. Operațiile de deschidere și închidere de fișier se fac cu ajutorul metodelor loadFile, respectiv SaveFile ale controlului richTextBox1, metode care primesc ca argument numele fișierului returnat de dialogul aferent, astfel:

               //deschide fisierul cu metoda LoadFile
       richTextBox1.LoadFile(openFileDialog1.FileName);



              //salvare fisier cu extensia .rtf
         richTextBox1.SaveFile(saveFileDialog1.FileName,  RichTextBoxStreamType.RichText);



                //portiunea selectata din text preia caracteristicile alese de utilizator
          richTextBox1.SelectionFont = fontDialog1.Font; 


                  //cod care actualizeaza culorile in document
           richTextBox1.SelectionColor = colorDialog1.Color;


Aplicația completă este următoarea:

 namespace RichTextBoxApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void nouToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //sterge textul controlului
            richTextBox1.Text = "";
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            //sterge textul controlului
            richTextBox1.Text = "";
        }

        private void deschideToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //titlul dialogului
            openFileDialog1.Title = "Deschide fisier";
            // seteaza tipurille de fisier
            openFileDialog1.Filter = "Fisiere text |*.txt| fisiere rtf|*.rtf";
            //in comboBox-ul File name nu vrem sa apara la deschiderea dialogului nici un nume
            openFileDialog1.FileName = "";
            //directorul care se deschide in mod implicit
            openFileDialog1.InitialDirectory = "MyDocuments";
            //atentionare daca numele nu exista
            openFileDialog1.CheckFileExists = true;
            //deschide dialogul OpennFileDialog
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            { //deschide fisierul cu metoda LoadFile
                richTextBox1.LoadFile(openFileDialog1.FileName);
            }
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            //titlul dialogului
            openFileDialog1.Title = "Deschide fisier";
            // seteaza tipurille de fisier
            openFileDialog1.Filter = "Fisiere text |*.txt| fisiere rtf|*.rtf";
            //in comboBox-ul File name nu vrem sa apara la deschiderea dialogului nici un nume
            openFileDialog1.FileName = "";
            //directorul care se deschide in mod implicit
            openFileDialog1.InitialDirectory = "MyDocuments";
            //atentionare daca numele nu exista
            openFileDialog1.CheckFileExists = true;
            //deschide dialogul OpennFileDialog
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            { //deschide fisierul cu metoda LoadFile
                richTextBox1.LoadFile(openFileDialog1.FileName);
            }
        }

        private void salvezaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //titlul dialogului
            saveFileDialog1.Title = "salveaza fisierul";
            //extensia implicita de salvare
            saveFileDialog1.DefaultExt = ".rtf";
            //atentionare de suprascriere
            saveFileDialog1.OverwritePrompt = true;
            //deschide dialogul de salvare fisier
            if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            { //salvare fisier cu extensia .rtf
                richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.RichText);
            }
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            //titlul dialogului
            saveFileDialog1.Title = "salveaza fisierul";
            //extensia implicita de salvare
            saveFileDialog1.DefaultExt = ".rtf";
            //atentionare de suprascriere
            saveFileDialog1.OverwritePrompt = true;
            //deschide dialogul de salvare fisier
            if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            { //salvare fisier cu extensia .rtf
                richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.RichText);
            }
        }

        private void iesireToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void fontToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // se deschide dialogul font
            if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            { //portiunea selectata din text preia caracteristicile alese de utilizator
                richTextBox1.SelectionFont = fontDialog1.Font;
            }
        }

        private void toolStripButton4_Click(object sender, EventArgs e)
        {
            {
                // se deschide dialogul font
                if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                { //portiunea selectata din text preia caracteristicile alese de utilizator
                    richTextBox1.SelectionFont = fontDialog1.Font;
                }
            }
        }

        private void culoareToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //deschide dialogul ColorDialog
            if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //cod care actualizeaza culorile in document
                richTextBox1.SelectionColor = colorDialog1.Color;
            }
        }

        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            //deschide dialogul ColorDialog
            if (colorDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //cod care actualizeaza culorile in document
                richTextBox1.SelectionColor = colorDialog1.Color;
            }
        }
    }
}