C#: atestat și pregătire ONTI

C#: primul formular și ciclul evenimentelor

Creează un formular Windows Forms complet și urmărește evenimentul Click. Înțelege pornirea aplicației, bucla de mesaje și diferența dintre stare și afișare.

În consolă, programul citește și calculează într-o ordine stabilită de cod. Într-o aplicație grafică, utilizatorul decide când apasă un buton sau închide fereastra. Application.Run pornește bucla care primește aceste evenimente. Constructorul pregătește controalele, iar handlerii execută operații scurte ca răspuns la interacțiuni.

Cum lucrezi cu exemplul

Exemplul complet se compilează ca Windows Forms App pe .NET Framework 4.8, cu C# 7.3. Deschide Lesson.csproj din arhivă în Visual Studio pe Windows. Rulează scenariile descrise mai jos; verificarea compilării nu înlocuiește testarea ferestrei și a dispozitivelor folosite.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

Exemplul complet creează un formular, un buton și un label fără fișiere Designer ascunse. Pune întregul cod în Program.cs al unui proiect Windows Forms App (.NET Framework 4.8), cu un singur punct de intrare. Atributul STAThread este păstrat pentru serviciile Windows care cer acest model de apartament.

Numărul clickurilor este un câmp int, nu textul labelului. Handler-ul incrementează modelul, apoi actualizează afișarea. Controls.AddRange adaugă controalele în formular; simpla construire a unui Button nu îl face vizibil. Constructorul se termină înainte ca utilizatorul să înceapă interacțiunea.

Exemplu și rezultat așteptat

La pornire apare Clickuri: 0. Un click produce 1, iar trei clickuri produc 3. Minimizarea și restaurarea ferestrei nu resetează câmpul. Închiderea formularului principal încheie Application.Run și aplicația. O nouă pornire începe din nou de la zero, deoarece nu există persistare.

Schemă pentru lecția 11: Application.Run; Utilizator: Click; count: 0 → 1; Label: Clickuri: 1.Application.Run → Utilizator: Click → count: 0 → 1 → Label: Clickuri: 1.Mărește schema ↗

Codul complet

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new LessonForm());
    }
}

class LessonForm : Form
{
int count;
    readonly Label output = new Label { Left=20, Top=70, Width=240, Text="Clickuri: 0" };
    public LessonForm() {
        Text="Primul formular"; ClientSize=new Size(360,140);
        var button=new Button { Left=20,Top=20,Width=140,Text="Adauga un click",TabIndex=0 };
        button.Click += (sender,e) => { count++; output.Text="Clickuri: " + count; };
        Controls.AddRange(new Control[] { button,output });
    }
}

Greșeli și limite

Nu pune o buclă infinită în constructor sau în Click: vei bloca procesarea mesajelor și fereastra nu va mai răspunde. Nu adăuga manual același handler dacă Designer-ul l-a abonat deja. Nu folosi textul labelului ca bază de date și nu încerca să îl parsezi la fiecare click.

Exersează

Adaugă un buton Reset care pune câmpul la zero și actualizează labelul. Testează trei clickuri, reset, apoi încă un click: rezultatul final trebuie să fie 1. Verifică apăsarea butonului și cu Tab urmat de Space. Explică de ce restaurarea ferestrei păstrează scorul, dar repornirea aplicației nu.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: testează modelul înainte de a desena interfața

Lecția următoare: C#: validarea formularului cu ErrorProvider.

Referință: documentația Microsoft.

Întrebări frecvente

De ce nu apare butonul creat?

Trebuie adăugat în colecția Controls a unui container vizibil și poziționat în zona lui.

Ce face Application.Run?

Pornește bucla de mesaje și ține aplicația activă cât timp formularul principal este deschis.

Unde păstrez numărul clickurilor?

În model sau într-un câmp numeric, apoi îl transformi în text pentru afișare.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →