De când apariția cultului Delphi o dată s-a schimbat mult. Dar ceea ce rămâne rămâne inhibarea unor elemente vizuale încorporate.
A trebuit să fac acest lucru atunci când dezvoltam un simplu domeniu de verificare. Un element foarte convenabil, aparent, al interfeței - o coloană cu o căsuță de bifare - de fapt, a fost frântă. Pentru a marca 500 de linii a durat aproximativ 10 secunde. 1000 înregistrări au crescut de 4 ori (și nu 2, după cum ați putea crede). Nici un truc nu a dus la o creștere semnificativă a productivității.
Googling pe Internet, a spus la revedere ideea de a face ceva bazat pe acest tip de coloană.
Nou-veniții plâns de muncă lent, iar „vechi“ sfătuit să folosească o casetă de selectare obișnuită a adăugat programatică la locul potrivit. Se pare că o mulțime de locurile potrivite, și pentru a manipula afișarea casetele de selectare încă mai trebuie să manual - să definească linia vizibilă, setați caseta de la locul potrivit, pentru a „aminti“ de afișare (pornit / oprit) din fiecare. Am început să se eșueze la un astfel de hack, dar a amintit un alt posibile tipuri de coloane - DataGridViewImageColumn.
Sa dovedit că de asta aveți nevoie. Există o mulțime de moduri de a "taxi", o să-i sugerez pe cel pe care l-am folosit.
Pentru început, trebuie să pregătiți 2 casete de selectare: verificate și nici una. În cazul meu era o imagine, dimensiune 40 × 20 pixeli. În acest caz, lățimea coloanei a fost de 20.
Aplicând această imagine într-o celulă, se aliniază la dreapta (sau stânga) margine, în funcție de care parte a „pasăre“.
Determinați starea pornit / oprit verificând marginile de-a lungul cărora imaginile sunt aliniate. Fie ca masa să fie numită dataGridView1. Coloana cu "casetele de selectare" (amintiți-vă că nu sunt reale, ci doar emularea noastră) vor fi primele. Alinierea verticală este logică pentru a face pe mijloc. Apoi bifați caseta de selectare pentru prima linie, puteți scrie una dintre cele două opțiuni:
dataGridView1.Rows [0] .Celuri [0] .Style.Alignment = DataGridViewContentAlignment.MiddleLeft;
// sau
dataGridView1.Rows [0] .Cells [0] .Style.Alignment = DataGridViewContentAlignment.MiddleRight;
Așadar, aliniem imaginea pe marginea stângă / dreaptă (verticală - în mijloc, aceasta este indicată de Mijloc).
Totul este super. Acum putem gestiona programatic mărcile în orice rând, creând o iluzie (care depinde de calitatea imaginii) a întregului element.
Dar aceasta este doar o parte a sarcinii. Ar fi frumos să dai utilizatorului posibilitatea de a schimba starea steagurilor făcând clic în celulele din prima coloană. Acest lucru este ajutat de evenimentul CellClick - faceți dublu clic pe câmpul corespunzător din fila Proprietăți → Evenimente când formularul DataGridView este activ.
private void dataGridView1_CellClick (expeditor obiect, DataGridViewCellEventArgs e)
// e.RowIndex - șir
// e.ColumnIndex - coloana
// System.Drawing.Bitmap
// dacă se selectează primul rând și coloana (valorile negative sunt titluri).
dacă (e.ColumnIndex == 0 e.RowIndex> = 0) // dacă este aliniat la stânga.
if (dataGridView1.Rows [e.RowIndex] .Cells [0] .Style.Alignment == DataGridViewContentAlignment.MiddleLeft)
//. apoi treceți la alinierea din dreapta
dataGridView1.Rows [e.RowIndex] .Cells [0] .Style.Alignment = DataGridViewContentAlignment.MiddleRight;
>
altfel //. altfel - în stânga
dataGridView1.Rows [e.RowIndex] .Cells [0] .Style.Alignment = DataGridViewContentAlignment.MiddleLeft;
>
// în același timp eliminați selecția de pe linie
dataGridView1.Rows [e.RowIndex] .Cells [0] .Selected = false;
>
>
Numele interceptorului este dataGridView1_CellClick () - mediul de dezvoltare va genera automat. Adăugăm codul corespunzător. Abordarea DataGridViewContentAlignment definește constantele pentru alinierea imaginii într-o celulă.
În general, asta e tot. Pentru cei care au ajuns aici, voi arăta cum puteți schimba / combina imaginile de fundal. Să presupunem că ați încărcat o nouă resursă (imagine) și i-ați acordat o verificare a numelui. Accesul la resursele implementate este prin proprietățile. Resursele aplicației. Dacă uitați numele aplicației, o puteți vedea în Solution Explorer. În cazul meu, aceasta este MyWindowsApplication.
// pentru prima linie utilizați resursa de verificare
dataGridView1.Rows [0] .Cells [0] .Value = MyWindowsApplication.Properties.Resources.check;
// pentru al doilea - check2
dataGridView1.Rows [1] .Cells [0] .Value = MyWindowsApplication.Properties.Resources.check2;
În mod surprinzător, o astfel de tehnică simplă accelerează munca prin "marcarea" cu un ordin de mărime (și chiar mai mult atunci când numărul de rânduri crește).