Selles C # programmeerimisõpetuses keskendun täpsematele juhtelementidele nagu ComboBoxes, Grid ja ListViews ning näitan teile, kuidas te neid kõige tõenäolisemalt kasutate. Ma ei puutu andmetesse ega seo neid hilisema õpetusega. Alustame lihtsa juhtelemendi, ComboBoxiga.
Combo keskmes on esemekogumik ja selle asustamiseks on kõige lihtsam viis combo ekraanile laskmine, vali omadused (kui te ei näe atribuutide aknaid, klõpsake üleval menüüs Vaade ja siis atribuutide aknas nuppu Kuva), leidke üksused ja klõpsake ellipsid nuppu. Seejärel saate stringe sisestada, programmi koostada ja valikute nägemiseks kombo alla tõmmata.
Nüüd lõpetage programm ja lisage veel mõned numbrid: neli, viis.. kuni kümme. Selle käivitamisel näete ainult 8, kuna see on MaxDropDownItems vaikeväärtus. Võite vabalt seada selle väärtusele 20 või 3 ja seejärel käivitada, et näha, mida see teeb.
On tüütu, et kui see avaneb, ütleb see comboBox1 ja saate seda redigeerida. Seda me ei taha. Leidke DropDownStyle atribuut ja muutke DropDown DropDownListiks. (See on ühendatud!). Nüüd pole teksti ja seda ei saa redigeerida. Võite valida ühe numbrist, kuid see avaneb alati tühjana. Kuidas valida number, millest alustada? Noh, see pole vara, mida saate projekteerimise ajal seada, kuid selle rea lisamine teeb seda.
Lisage see rida vormi1 () konstruktorisse. Peate vaatama vormi koodi (paremklõpsake rakenduses Solution Exploreri nuppu From1.cs ja klõpsake käsku Kuva kood). Leia InitializeComponent (); ja lisage see rida kohe pärast seda.
Kui seate kombinatsiooni DropDownStyle atribuudiks Lihtne ja käivitate programmi, ei saa te midagi. See ei vali ega klõpsa ega vasta. Miks? Kuna projekteerimise ajal peate haarama alumise venituse käepideme ja muutma kogu juhtimispuldi kõrgemaks.
Näites 2 olen ComboBoxi ümber nimetanud komboks, muutnud kombinatsiooni DropDownStyle tagasi versiooniks DropDown, nii et seda saab redigeerida ja lisanud nupu Lisa, mida nimetatakse btnAdd. Olen topeltklõpsanud nupul Lisa, et luua sündmus btnAdd_Click () sündmuse käitleja ja lisanud selle sündmuse rea.
Tippige programmi käivitamisel uus arv, öelge üksteist ja klõpsake nuppu Lisa. Sündmuste käitleja võtab teie sisestatud teksti (liitkastis. Tekst) ja lisab selle Combo üksuste kollektsiooni. Klõpsake Combo ja meil on nüüd uus kirje Eleven. Nii lisate uue stringi Combole. Selle eemaldamine on pisut keerulisem, kuna peate leidma eemaldatava stringi indeksi ja seejärel eemaldama. Allpool näidatud meetod RemoveAt on selle kogumise meetod. peate lihtsalt määrama, millises üksuses parameetris Removeindex.
eemaldab stringi positsioonis RemoveIndex. Kui kombinatsioonis on n üksust, siis kehtivad väärtused on 0 kuni n-1. 10 üksuse puhul väärtused 0..9.
Kui see ei leia teksti, tagastab väärtus -1, vastasel juhul tagastab stringi 0-põhise indeksi liitloendis. Leidub ka ülekoormatud meetod FindStringExact, mis võimaldab teil täpsustada, kust otsimist alustate, et saaksite duplikaatide korral esimese vahele jätta jne. See võib olla mugav loendis olevate duplikaatide eemaldamiseks.
Kui klõpsate nuppu btnAddMany_Click (), tühjendatakse tekst liitkastist, seejärel tühjendatakse liitkombinatsiooni üksuste sisu sisu ja helistatakse siis liitkombinatsiooniks. AddRange (stringide lisamiseks väärtuste massiivist). Pärast seda seab see ühendi SelectedIndex väärtuseks 0. See näitab kombinatsiooni esimest elementi. Kui teete üksusi ComboBoxis või kustutate neid, siis on kõige parem jälgida, milline üksus on valitud. Valides SelectedIndex väärtuseks -1, peidetakse valitud üksused.
Nupp Lisa palju kustutab nimekirja ja lisab 10 000 numbrit. Olen lisanud kombo. BeginUpdate () ja combo, EndUpdate () kutsub ringi ümber, et vältida Windowsi virvendust, mis üritab juhtelementi värskendada. Minu kolmeaastasel arvutil kulub 100 000 numbri liitmisse lisamiseks veidi üle sekundi.
See on mugav juhtelement tabelitabeli kuvamiseks ilma ruudustiku keerukuseta. Üksusi saate kuvada suurte või väikeste ikoonidena, vertikaalses loendis olevate ikoonide loendina või kõige kasulikumalt ruudustikus olevate üksuste ja alamtekstide loendina. Seda me siin teeme.
Pärast ListView kukutamist vormil klõpsake veergude atribuudil ja lisage 4 veergu. Need on TownName, X, Y ja Pop. Seadistage iga veerupealkirja tekst. Kui te ei näe pealkirju loendis ViewView (pärast kõigi 4 lisamist), määrake loendi ViewView vaate atribuut üksikasju. Kui vaatate selle näite koodi, sirvige alla, kuni seal kuvatakse Windows Form Designeri kood ja laiendage regiooni, kus näete koodi, mis loob loendivaate. Kasulik on vaadata süsteemi toimimist ning saate selle koodi kopeerida ja ise kasutada.
Iga veeru laiuse saate käsitsi seada, liigutades kursori päise kohal ja lohistades seda. Või saate seda teha koodis, mis on nähtav pärast vormi kujundaja piirkonna laiendamist. Peaksite nägema järgmist koodi:
Rahvastiku veeru korral kajastuvad muudatused koodis kujundajas ja vastupidi. Pidage meeles, et isegi kui seate atribuudi Lukustatud tõeseks, mõjutab see ainult kujundajat ja töö ajal saate veergude suurust muuta.
Loendivaated on varustatud ka paljude dünaamiliste omadustega. Klõpsake ikooni (Dünaamilised atribuudid) ja märkige soovitud atribuut. Kui määrate atribuudi dünaamiliseks, loob see faili XML .config ja lisab selle rakendusse Solution Explorer.
Projekteerimise ajal muudatuste tegemine on üks asi, kuid me peame seda tõesti tegema, kui programm töötab. ListView koosneb 0 või enamast üksusest. Igal üksusel (ListViewItem) on teksti omadus ja alamüksuste kogu. Esimeses veerus kuvatakse üksuse tekst, järgmises veerus SubItem [0] .text, siis SubItem [1] .text ja nii edasi.
Lisasin rea lisamiseks nupu ja linnanime muutmiskasti. Sisestage kasti suvaline nimi ja klõpsake nuppu Lisa rida. See lisab loendvaatesse uue rea esimesse ja järgmisse kolme veergu pandud linnanimega (Alam-elemendid [0..2]) on täidetud juhuslike arvudega (teisendatud stringideks), lisades need stringid neid.
Nüüd seadke atribuudi ListView Multiselect väärtuseks vale. Tahame valida korraga ainult ühe üksuse, kuigi kui soovite korraga rohkem eemaldada, on see sarnane, välja arvatud juhul, kui peate silmust tagurpidi pöörama. (Kui muudate üksused tavalises järjekorras ja kustutate üksused, pole järgmised üksused valitud indeksitega sünkroonis).
Paremklõpsu menüü ei tööta veel, kuna meil pole menüü üksusi, mida sellel kuvada. Nii paremklõpsake PopupMenu (vormi all) ja vormi ülaosas, kus kuvatakse tavaline menüüredaktor, kuvatakse kontekstimenüü. Klõpsake sellel ja seal, kus öeldakse Tippige siia, tippige Eemalda üksus. Atribuutide aknas kuvatakse MenuItem nii ümbernimetamiseks, et mniRemove. Topeltklõpsake sellel menüüelemendil ja peaksite saama menüütem1_Clicki sündmuste käitleja koodi funktsiooni. Lisage see kood, nii et see näeks välja selline.
Kui unustate üksuse Eemalda, unustage sellel vormil Kujundusvorm klõpsata lihtsalt üksust PopupMenu. See viib selle uuesti vaatesse.
Kui aga käitate seda ja ei lisa üksust ning valite selle, siis paremklõpsamisel ja menüü kuvamisel ning klõpsuga nupul Eemalda annab see erandi, kuna valitud üksust pole. See on halb programmeerimine, nii et siin on, kuidas seda parandada. Topeltklõpsake hüpiküritusel ja lisage see koodirea.
DataGridView on nii kõige keerulisem kui ka kõige kasulikum komponent, mida C # -ga tasuta pakutakse. See töötab nii andmeallikatega (st andmebaasist pärinevate andmetega) kui ka ilma (st andmetega, mille lisate programmiliselt). Ülejäänud selle õpetuse korral näitan selle kasutamist ilma andmeallikateta. Lihtsamate kuvamisvajaduste jaoks võite leida sobivama tavalise nimekirjavaate.
Kui olete kasutanud mõnda vanemat DataGridi juhtelementi, on see ainult üks steroididest: see annab teile rohkem sisseehitatud veerutüüpe, saab töötada koos nii sisemised kui ka välised andmed, kuvari (ja sündmuste) rohkem kohandamist ning annab suurema kontrolli lahtrite käitlemise üle külmumisridade ja veerge.
Võrguandmetega vormide kujundamisel on kõige tavalisem määrata erinevad veerutüübid. Võib-olla on ühes veerus märkeruudud, teises kirjutuskaitstud või muudetav tekst ning kursuste numbrid. Need veerutüübid on ka tavaliselt joondatud erinevalt numbritega, mis on üldiselt joondatud paremale, nii et komakohad on joondatud. Veeru tasemel saate valida nupu Button, märkeruudu, ComboBox, Image, TextBox ja Links. kui neist ei piisa, saate määratleda oma kohandatud tüübid.
Lihtsaim viis veergude lisamiseks on IDE-s kujundamine. Nagu me juba varem nägime, kirjutab see teile lihtsalt koodi ja kui olete seda juba mitu korda teinud, võiksite eelistada koodi ise lisada. Kui olete seda mitu korda teinud, pakub see teile teavet selle kohta, kuidas seda programmiliselt teha.
Alustame mõne veeru lisamisega, tilgutage vormile DataGridView ja klõpsake paremas ülanurgas olevat väikest noolt. Seejärel klõpsake nuppu Lisa veerg. Tehke seda kolm korda. See avaneb dialoogiboks Veeru lisamine, kus määrate veeru nime, veeru ülaosas kuvatava teksti ja saate valida selle tüübi. Esimene veerg on YourName ja see on vaikimisi TextBox (dataGridViewTextBoxColumn). Seadke päise tekst ka oma nimele. Valige teine veerg Age ja kasutage ComboBoxi. Kolmas veerg on lubatud ja see on kontrollruudu veerg.
Pärast kõigi kolme lisamist peaksite nägema kolme veeru rida, mille keskel on kombinatsioon (vanus) ja veerus Lubatud märkeruut. Kui klõpsate DataGridView, siis peaksite kinnisvarainspektoris leidma veerud ja klõpsama (kogu). See avab dialoogi, kus saate määrata iga veeru atribuudid, näiteks üksikud lahtri värvid, tööriistavihje tekst, laius, minimaalne laius jne. Kompileerimisel ja käitamisel märkate, et saate muuta veergude laiusi ja tööaega. Peamise DataGridView kinnisvarainspektoris saate selle lubamiseks lubada AllowUseril muuta veergude suurust valeks.
Lisame ridu DataGridView juhtseadmesse koodis ja näidete failis ex3.cs on see kood. Alustades vormingusse TextEdit, ComboBox ja nupu lisamisest, millel on DataGridView. Seadke DataGridView atribuut AllowUserto AddRows valeks. Kasutan ka silte ja neid kutsutakse liitkastiks cbAges, nupuks btnAddRow ja TextBox tbName. Olen lisanud vormile ka sulgemisnupu ja sellel topeltklõpsanud, et luua btnClose_Clicki sündmuse käitleja skelett. Kui lisate sinna sõna Close (), siis see töötab.
Vaikimisi on nupu Lisa rida lubatud atribuut käivitamisel vale. Me ei soovi DataGridView-le ühtegi rida lisada, kui nii kasti Nimi TextEdit kui ka ComboBoxis on tekst. Lõin meetodi CheckAddButton ja genereerisin siis Nimi teksti redigeerimise kasti jaoks Lahku sündmuste käitleja, topeltklõpsates atribuudides sõna Leave kõrval, kui see sündmusi kuvab. Atribuutide kast näitab seda ülaltoodud pildil. Vaikimisi näitab atribuutide lahter atribuute, kuid näete sündmuste käitlejaid, kui klõpsate välknupul.
Oleksite võinud selle asemel kasutada TextChangedi sündmust, kuigi see helistab CheckAddButton () meetod iga klahvivajutuse jaoks, mitte siis, kui juhtnupp on lahkunud, st kui mõni teine juhtseadis võidab fookus. Ages Combo kasutasin sündmust TextChanged, kuid valisin uue sündmuse töötleja topeltklõpsamise asemel sündmuse käitleja tbName_Leave.
Kõik sündmused pole ühilduvad, kuna mõned sündmused pakuvad lisaparameetreid, kuid kui näete varem genereeritud käitlejat, siis saate seda kasutada. See on enamasti eelistuse küsimus. Teil võib olla eraldi sündmuste käitleja iga kontrollimiseks sündmuste käitlejate kasutamine või jagamine (nagu ma tegin), kui neil on ühine sündmuse allkiri, st parameetrid on sama.
Kutsusin DataGridView komponendi ümber lühiduse huvides dGView'ks ja klõpsasin topeltklõpsuga AddRow, et genereerida sündmuste käitleja skelett. See allolev kood lisab uue tühja rea, saab selle rea indeksi (see on RowCount-1, nagu see just lisati, ja RowCount on 0 põhineb) ja siis pääseb sellele reale oma indeksi kaudu ning seab veergude TeieNimi ja selle rea lahtrites väärtused Vanus.
Vormi kujundamisel peaksite mõtlema konteinerite ja juhtseadmete osas ning seda, milliseid juhtelementide rühmi tuleks koos hoida. Lääne kultuurides loevad inimesed niikuinii vasakult ülalt paremale, nii et seda oleks lihtsam lugeda.
Mahuti on mis tahes juhtseadis, mis võib sisaldada ka muid juhtelemente. Tööriistakastist leiate paneeli, FlowLayoutpaneli, SplitContaineri, TabControli ja TableLayoutPaneli. Kui te ei näe tööriistakasti, kasutage menüüd Vaade ja leiate selle. Konteinerid hoiavad juhtseadmeid koos ja kui te konteineri teisaldate või selle suurust muudate, mõjutab see juhtseadmete asukohta. Lihtsalt liigutage vormikujunduses juhtnuppe konteineri kohal ja see mõistab, et konteiner on nüüd vastutav.
Paneel sarnaneb GroupBoxiga, kuid GroupBox ei saa kerida, kuid võib kuvada pealdist ja vaikimisi on ääris. Paneelidel võivad olla äärised, kuid vaikimisi mitte. Ma kasutan GroupBoxes, kuna need näevad kenamad välja ja see on oluline, kuna:
Paneelid on käepärased ka konteinerite rühmitamiseks, nii et paneelil võib olla kaks või enam rühmaboksi.
Siin on näpunäide konteineritega töötamiseks. Tilgutage jagatud konteiner vormile. Klõpsake vasakut paneeli ja siis paremat. Nüüd proovige SplitContainer vormist eemaldada. See on keeruline, kuni paremklõpsate ühel paneelil ja klõpsake siis nuppu Vali SplitContainer1. Kui see on kõik valitud, saate selle kustutada. Teine viis, mis kehtib kõigi juhtseadmete ja konteinerite kohta, on vajuta Esc klahvi vanema valimiseks.
Konteinerid võivad pesitseda ka üksteise sees. Lihtsalt lohistage suurem peal suurem ja näete korraks õhukest vertikaalset joont, mis näitab, et üks asub nüüd teises. Vanemakonteineri lohistamisel liigutatakse last sellega. Näide 5 näitab seda. Vaikimisi pole helepruun paneel konteineri sees, nii et kui klõpsate liikumisnuppu, liigutatakse GroupBox, kuid paneeli pole. Nüüd lohistage paneel üle GroupBoxi, nii et see asub täielikult Groupboxis. Selle aja kompileerimisel ja käivitamisel liigub nupu Teisaldamine klikkimine mõlemad koos.
TableLayoutpanel on huvitav konteiner. See on tabeli struktuur, mis on korraldatud nagu 2D-lahtrite ruudustik, kus iga lahter sisaldab ainult ühte juhtelementi. Lahtris ei saa olla rohkem kui üks juhtelement. Saate määrata, kuidas tabel kasvab, kui lisatakse rohkem juhtelemente või isegi siis, kui see ei kasva. See näib olevat HTML-tabeli modelleeritud, kuna lahtrid võivad veerge või ridu hõlmata. Isegi lapsekontrolli ankurdamise käitumine konteineris sõltub marginaali ja polsterduse sätetest. Ankrute kohta näeme lähemalt järgmisel lehel.
Näites Ex6.cs olen alustanud kahe veeru põhitabeliga ja selle määranud dialoogiboksi Juhtimis- ja reastiilid kaudu (valige juhtnupp ja klõpsake nuppu Väike parempoolne ülaosas asuv kolmnurk, mis asub paremas ülanurgas, et näha toimingute loendit ja klõpsata viimast), et vasakpoolne veerg on 40% ja parem veerg 60% laius. See võimaldab teil täpsustada veerulaiuse absoluutpikslites, protsentides või võite lasta sellel automaatse suuruse määrata. Kiirem viis selle dialoogi juurde pääsemiseks klõpsake lihtsalt atribuutide aknas veergude kõrval asuval kogumikul.
Olen lisanud nupu AddRow ja jätnud atribuudi GrowStyle selle vaikeväärtusega AddRows. Kui laud saab täis, lisab see veel ühe rea. Teise võimalusena saate selle väärtused seada väärtusteks AddColumns ja FixedSize, nii et see ei saaks enam kasvada. Ex6-s, kui klõpsate nupul Lisa juhtnupud, kutsub see kolm korda AddLabel () meetodit ja AddCheckBox () korra. Iga meetod loob juhtnupu eksemplari ja kutsub seejärel tblPanel. Juhtelemendid. Lisamine () Pärast 2. juhtelemendi lisamist põhjustab kolmas juhte tabeli kasvu. Pilt näitab seda pärast seda, kui nupule Lisa juhtnupp on üks kord klõpsatud.
Juhul kui teil on küsimus, kust pärinevad minu kutsutud meetodites AddCheckbox () ja AddLabel () vaikeväärtused, oli kontroll lisati algselt käsitsi kujundaja tabelisse ja seejärel kopeeriti selle loomiseks ja lähtestamiseks kood sellest piirkonnas. Initsialiseerimiskoodi leiate meetodikõnes InitializeComponent, kui klõpsate allpool asuva piirkonna vasakul + asuval plussnupul:
Teise ja järgneva juhtelemendi valimisel, isegi erinevat tüüpi juhtelementide valimisel, saate korraga valida mitu juhtelementi, hoides all klahvi Shift. Atribuutide aken näitab ainult neid mõlemale ühiseid atribuute, nii et saate need kõik seada samale suurusele, värvile ja tekstiväljadele jne. Isegi samu sündmuste käitlejaid saab määrata mitmele juhtelemendile.
Sõltuvalt kasutusest muudab kasutaja mõnda vormi sageli. Miski ei näe halvem välja kui vormi suuruse muutmine ja juhtelementide nägemine püsivad samas asendis. Kõigil juhtnuppidel on ankrud, mis võimaldavad teil "kinnitada" need 4 serva külge, nii et juhtimisseade liigub või venib, kui kinnitatud serva liigutatakse. Kui vorm on paremast servast venitatud, viib see järgmise käitumiseni:
Nuppude (nt Sule) puhul, mis asuvad tavaliselt paremas alanurgas, on vaja käitumist 3. ListViews ja DataGridViews sobivad kõige paremini kahega, kui veergude arv on vormi ületäitmiseks piisav ja vajab kerimist). Ülemine ja vasak ankur on vaikimisi. Atribuutide aken sisaldab vahvat väikest toimetajat, mis näeb välja nagu Inglismaa lipp. Sobiva ankru seadmiseks või tühjendamiseks klõpsake lihtsalt mõnda riba (kaks horisontaalset ja kahte vertikaalset), nagu on näidatud ülaltoodud pildil.
Üks omadus, mida palju ei mainita, on atribuut Silt, kuid sellest hoolimata võib see olla uskumatult kasulik. Atribuutide aknas saate määrata ainult teksti, kuid koodis võib olla mis tahes väärtus, mis laskub objektist.
Olen kasutanud silti terve objekti hoidmiseks, näidates ListView-is ainult mõnda selle atribuuti. Näiteks võiksite kliendi kokkuvõtte loendis näidata ainult kliendi nime ja numbrit. Kuid paremklõpsake valitud klientil ja avage siis vorm koos kõigi kliendi andmetega. See on lihtne, kui loote klientide nimekirja, lugedes kõik kliendi andmed mälust ja määrates sildil viite kliendiklassi objektile. Kõigil juhtelementidel on silt.
TabControl on mugav viis vormiruumi säästmiseks, kui teil on mitu vahekaarti. Igal vahekaardil võib olla ikoon või tekst ning saate valida mis tahes vahekaardi ja kuvada selle juhtnupud. TabControl on konteiner, kuid see sisaldab ainult vahelehti. Iga TabPage on ka konteiner, millele saab lisada tavalisi juhtelemente.
Näites x7.cs olen loonud kahe vahekaardi lehe paneeli, mille esimene vahekaart nimega Juhtseadmed omab kolme nuppu ja ruutu. Teisel vahekaardil on silt Logid ja seda kasutatakse kõigi logitud toimingute kuvamiseks, sealhulgas nupu klõpsamine või märkeruudu märkimine. Iga nupuvajutuse logimiseks kutsutakse meetodit nimega Logi (). See lisab tarnitud stringi loendikasti.
Olen tavapärasel viisil lisanud ka kaks paremklõpsuga hüpikmenüü üksust TabControli. Esmalt lisage vormile ContextMenuStrip ja seadke see TabControli omaduses ContextStripMenu. Kaks menüüvalikut on Lisa uus leht ja Eemalda see leht. Olen siiski lehtede eemaldamist piiranud, nii et eemaldada saab ainult värskelt lisatud vahelehti ja mitte kahte algset.
See on lihtne, looge lihtsalt uus vahelehe leht, lisage sellele vahekaardi tekstpealkiri ja lisage see vahekaartide vahekaardile TabControl
Lehe eemaldamine on lihtsalt TabPagesile helistamine. EemaldaAt (), kasutades sakke. SelectedIndex, et saada praegu valitud vahekaart.
Selles õpetuses nägime, kuidas mõned keerukamad juhtelemendid töötavad ja kuidas neid kasutada. Järgmises õpetuses jätkan GUI teemaga ja vaatan tausttöötaja niiti ning näitan, kuidas seda kasutada.