WinForms komponente — pregled

↑ Nazad

Referenca za non-visual komponente i pozadinsku obradu u WinForms-u na .NET 10 (net10.0-windows). Izvorni projekat: C:\Users\Kimi\source\repos\WinFormsApp-test.

Šta je unutra

StranicaFajlŠta rešava
Serijski portSerialPortComponent.csVraća SerialPort u Toolbox (u .NET-u ga tamo nema)
TCP i TLSTcpClientComponent.csSirova TCP veza ka uređaju, opciono šifrovana (TLS)
HTTP i HTTPSHttpClientComponent.csGET/POST ka web servisima i API-jima
Dugačak posaoBatchJob.cs, UiLogSink.csObrada u pozadini sa progresom, logom, pauzom i prekidom
TerminalShellSession.csŽiv cmd / powershell / pwsh: komande unutra, izlaz napolje
Forma koja spajaWorkerDemoForm.csSve gore zajedno, bez blokiranja UI-a

Zašto SerialPort nije u Toolbox-u

U .NET Framework 4.x SerialPort je deo framework-a i stoji u Toolbox-u pod Components. U .NET 5+ System.IO.Ports je zaseban NuGet paket, pa ga Toolbox ne vidi.

Kako se pravi komponenta (omotač)

Dva slučaja:

  1. Klasa već nasleđuje Component (SerialPort, FileSystemWatcher, Process...): samo je nasledi.
  2. Klasa ne nasleđuje Component ili je sealed (TcpClient, HttpClient, tvoje klase): napravi klasu : Component koja drži originalni objekat unutra i izlaže samo ono što treba.

Posle Build-a komponenta se pojavljuje u Toolbox-u pod „<ImeProjekta> Components". Ako je nema: Tools → Options → Windows Forms Designer → General → AutoToolboxPopulate = True, pa zatvori i otvori formu.

Atributi koji se koriste

DeoZašto
: ComponentBez toga nema Toolbox-a ni trake ispod forme
Konstruktor (IContainer container)Dizajner ga ubacuje u components → zatvara se zajedno sa formom
[ToolboxItem(true)]Prikaži u Toolbox-u
[DesignerCategory("Code")]Dvoklik na fajl otvara kod, ne prazan dizajner
[Category], [Description]Grupisanje i opis u Properties prozoru
[DefaultValue]Ne upisuje se u Designer.cs dok se ne promeni; izmenjeno je podebljano
[Browsable(false)] + DesignerSerializationVisibility.HiddenZa runtime svojstva (IsConnected) koja dizajner ne sme da snima
[DefaultEvent]Šta otvara dvoklik na komponentu (kod Timer-a je to Tick)
SynchronizationContextEventi stižu na UI nit → u handleru nema Invoke
Dispose(bool)Oslobađa unutrašnji objekat

Dva pravila

Izvor: 01-pregled.md