Vă mulțumim pentru susținere

Cum se creează un tip de dialog de preferințe pentru vizualizarea copacilor în C #?

Scriu o aplicație care este, în principiu, doar un dialog de preferințe, asemănător dialogului de preferințe pentru vizualizarea copacilor pe care Visual Studio îl folosește. Funcția aplicației este pur și simplu o transmisie a datelor dintr-un dispozitiv serial într-un fișier. Efectuează multe, multe transformări asupra datelor înainte de a le scrie în fișier, astfel încât GUI pentru aplicație este pur și simplu toate setările care dictează ce ar trebui să fie acele transformări.

Care este cel mai bun mod de a proiecta / codifica un dialog de preferințe pentru vizualizarea copacilor? Modul în care mă gândesc este construirea ferestrei principale cu un control de copac în stânga. Apoi am creat controale de containere care corespund fiecărui nod al copacului. Atunci când este selectat un nod, aplicația aduce controlul corespunzător al containerului respectiv în partea frontală, îl mută în poziția corectă și îl maximizează în fereastra principală. Acest lucru pare într-adevăr, într-adevăr clunky în timp ce proiectarea acesteia. În principiu, înseamnă că am multe tone de controale ale containerului dincolo de marginea ferestrei principale în timpul timpului de proiectare pe care trebuie să-l păstrez pentru a lucra cu ele. Nu știu dacă acest lucru are sens în modul în care scriu acest lucru, dar poate că acest lucru vizual pentru ceea ce vorbesc va face mai mult sens:

design de formă

Practic, trebuie să lucrez cu această formă uriașă, cu controale de containere peste tot și apoi să fac o grămadă de reformatări pentru a face totul să funcționeze. Acest lucru pare a fi un lot de lucru suplimentar. Fac asta într-un mod total stupid? Există o cale "evidentă" mai ușoară de a face acest lucru pe care mi-l lipsesc?

0
adăugat editat
Vizualizări: 2

3 răspunsuri

Greg Hurlman a scris:

De ce să nu arătați / ascundeți numai containerul potrivit când un nod este selectat în rețea? Au containere toate dimensionate în mod corespunzător în același loc și ascunde toate, dar implicit, care ar fi preselectate în grila de încărcare.

Din păcate, asta încerc să evit. Caut o modalitate ușoară de a gestiona interfața în timpul procesului de proiectare, cu un cod minimal de reformatare necesar pentru ca acesta să funcționeze în timpul rulării.

Îmi place răspunsul lui Duncan, deoarece înseamnă că designul interfeței fiecărui nod poate fi separat separat complet . Acest lucru înseamnă că nu mă suprapun pe liniile directoare și alte avantaje de design.

0
adăugat

Probabil aș crea mai multe clase de panouri bazate pe o clasă de bază care moșteni CustomControl. Aceste controale ar avea apoi metode precum Save / Load și chestii de genul asta. Dacă este așa, pot proiecta separat fiecare din aceste panouri.

Am folosit un control Wizard care în modul de proiectare, a manipulat mai multe pagini, astfel încât să poată face clic pe următoarea în designer și să proiecteze toate paginile deodată prin designer. Deși acest lucru a avut mai multe dezavantaje atunci când conectați codul la controale, probabil înseamnă că ați putea avea o configurație similară prin construirea unor clase de designer. Nu am scris niciodata nici o clasa de designer in VS, asa ca nu pot sa spun cum sau daca merita sa fie :-)

Sunt puțin curios de modul în care intenționați să gestionați încărcarea / salvarea valorilor în / de la controale? Trebuie să existe o mulțime de cod într-o clasă dacă toate paginile dvs. sunt într-o formă mare?

Și totuși, o altă modalitate ar fi, desigur, de a genera codul gui ca fiecare pagină este solicitată, utilizând informații despre ce tip de setări există.

0
adăugat

O modalitate mai clară este de a crea formulare separate pentru fiecare "panou" și, în fiecare constructor de forme, setați

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

În felul acesta, fiecare dintre aceste forme poate fi pusă în propriul designer, instanțiată una sau mai multe ori în timpul execuției și adăugată în zona goală ca un control normal.

Poate că forma principală ar putea utiliza un SplitContainer cu un TreeView static într-un singur panou și spațiu pentru a adăuga aceste formulare în celălalt. Odată ce au fost adăugate, s-ar putea să le folosească folosind metodele Hide / Show sau BringToFront / SendToBack .

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
0
adăugat