V tem vodniku za programiranje C # se bom osredotočil na napredne elemente nadzora, kot so ComboBoxes, Grids in ListViews, in prikazal vam način, kako jih boste najverjetneje uporabljali. Podatkov in vezave ne bom dotikal do poznejše vadbe. Začnimo s preprostim nadzorom, ComboBoxom.
V središču kombinacije je zbirka elementov in najpreprostejši način za to napolnite tako, da na zaslon spustite kombinacijo, izberite lastnosti (če ne vidite oken lastnosti, v zgornjem meniju kliknite Pogled in nato okno z lastnostmi), poiščite elemente in kliknite elipse gumb. Nato lahko vnesete vrvice, sestavite program in povlečete kombinacijo navzdol in si ogledate možnosti.
Zdaj ustavite program in dodajte še nekaj številk: štiri, pet.. do deset. Ko ga zaženete, boste videli le 8, ker je to privzeta vrednost MaxDropDownItems. Prosim, nastavite ga na 20 ali 3 in ga nato zaženite, da vidite, kaj počne.
Moteče je, da ko se odpre, piše comboBox1 in ga lahko urediš. Tega ne želimo. Poiščite lastnost DropDownStyle in spremenite DropDown v DropDownList. (Gre za kombinacijo!). Zdaj ni besedila in ga ni mogoče urejati. Izberete lahko eno od številk, vendar se vedno odpre prazno. Kako izberemo številko za začetek? No, to ni lastnost, ki jo lahko nastavite v času načrtovanja, vendar bo to dodala tudi vrstica.
Dodajte to vrstico v konstruktor Form1 (). Ogledati si morate kodo obrazca (v Raziskovalcu rešitev, z desno miškino tipko kliknite From1.cs in kliknite Prikaži kodo. Poišči InitializeComponent (); in dodajte to vrstico takoj za tem.
Če nastavite lastnost DropDownStyle za kombinacijo na Enostavno in zaženete program, ne boste dobili nič. Ne bo izbral ali kliknil ali se odzval. Zakaj? Ker morate v času načrtovanja prijeti za spodnji raztegni ročaj in narediti celoten nadzor višji.
V primeru 2 sem ComboBox preimenoval v combo, spremenil combo DropDownStyle nazaj v DropDown, da ga je mogoče urejati, in dodal gumb Add, imenovan btnAdd. Dvakrat sem kliknil gumb Dodaj, da sem ustvaril obdelovalec dogodkov btnAdd_Click (), in dodal to vrstico dogodka.
Ko zaženete program, vtipkajte novo številko, recimo Eleven in kliknite dodaj. Obdelovalec dogodkov sprejme besedilo, ki ste ga vnesli (v kombinaciji. Besedilo) in ga doda v zbirko izdelkov Combo. Kliknite na Combo in zdaj imamo nov vnos Eleven. Tako dodate nov niz v Combo. Če ga želite odstraniti, je nekoliko bolj zapleteno, saj morate poiskati indeks niza, ki ga želite odstraniti, in ga odstranite. Spodaj prikazana metoda RemoveAt je način zbiranja. morate samo določiti, kateri element v parametru Removeindex.
bo odstranil niz na položaju RemoveIndex. Če je v elementu n elementov, so veljavne vrednosti od 0 do n-1. Za 10 predmetov vrednosti 0..9.
Če besedila ne najde, se vrne -1, sicer vrne indeks niza na seznamu s seznama 0. Obstaja tudi preobremenjena metoda FindStringExact, ki vam omogoča, da določite, od kod zaženete iskanje, tako da lahko prvo preskočite itd itd, če imate podvojene. To je lahko priročno za odstranjevanje dvojnikov s seznama.
S klikom btnAddMany_Click () se besedilo izbriše iz kombinacije, nato pa se zbriše vsebina zbirke kombiniranih elementov in nato pokliče kombinirano. AddRange (dodajte strune iz matrike vrednosti. Ko to stori, nastavi izbrani kombinat Combo na 0. To prikazuje prvi element v kombinaciji. Če dodajate ali brišete elemente v storitvi ComboBox, je najbolje, da sledite, kateri element je izbran. Če nastavite SelectedIndex na -1, skrijete izbrane predmete.
Gumb Add Lots počisti seznam in doda 10.000 številk. Dodala sem kombinacijo. StartUpdate () in kombinirano, EndUpdate () pokliče okoli zanke, da prepreči morebitno utripanje sistema Windows, ki poskuša posodobiti nadzor. Na mojem triletnem računalniku je nekaj več kot sekunda, da v kombinacijo dodate 100.000 številk.
To je priročen nadzor za prikaz tabelarnih podatkov brez zapletenosti omrežja. Predmete lahko prikažete v obliki velikih ali majhnih ikon, kot seznam ikon na navpičnem seznamu ali najbolj uporabno kot seznam elementov in podštevilk v mreži in to bomo naredili tukaj.
Ko spustite ListView na obrazcu, kliknite lastnost stolpcev in dodajte 4 stolpce. To bodo TownName, X, Y in Pop. Nastavite besedilo za vsak stolpec. Če ne vidite naslovov na seznamu ListView (potem ko ste dodali vseh 4), nastavite pogled Lastnosti ListView na Podrobnosti. Če si ogledate kodo za ta primer, se pomaknite do mesta, kjer piše koda oblikovalca obrazcev Windows, in razširite regijo, za katero vidite kodo, ki ustvarja ListView. Koristno je videti, kako sistem deluje in to kodo lahko kopirate in uporabite sami.
Širino za vsak stolpec lahko nastavite ročno, tako da premaknete kazalec nad glavo in ga povlečete. Lahko pa to storite v kodi, ki je vidna, potem ko ste razširili regijo oblikovalca obrazcev. Prikazati bi morali tako kodo:
Spremembe kode se v stolpcu prebivalstva odražajo v oblikovalcu in obratno. Upoštevajte, da tudi če nastavite lastnost Zaklenjeno na true, to vpliva samo na oblikovalca in med izvajanjem lahko spremenite velikost stolpcev.
ListViews imajo tudi številne dinamične lastnosti. Kliknite (Dynamic Properties) in označite želeno lastnost. Ko lastnost nastavite za dinamično, ustvari XML .config datoteko in jo doda v Solution Explorer.
Spremembe v času načrtovanja so ena stvar, vendar to resnično moramo storiti, ko se program izvaja. ListView je sestavljen iz 0 ali več elementov. Vsak element (ListViewItem) ima lastnost besedila in zbirko SubItems. Prvi stolpec prikazuje besedilo predmeta, naslednji stolpec prikazuje SubItem [0] .text, nato SubItem [1] .text in tako naprej.
Za dodajanje vrstice in urejevalnega polja za ime mesta sem dodal gumb. V polje vnesite poljubno ime in kliknite Dodaj vrstico. To dodaja novo vrstico ListView z imenom mesta v prvem stolpcu in naslednjih treh stolpcih (PodItemi [0..2]) so napolnjeni z naključnimi številkami (pretvorjenimi v nizi), tako da se ti nizi dodajo v njim.
Zdaj nastavite lastnost ListView Multiselect na false. Izbrati želimo samo en element naenkrat, čeprav želite, da jih naenkrat odstranite več, je podobno, razen če se morate obrniti nazaj. (Če zavežete v običajnem vrstnem redu in izbrišete predmete, potem naslednji elementi niso sinhronizirani z izbranimi indeksi).
Meni z desnim klikom še ne deluje, saj v njem nimamo nobenih elementov menija. Torej z desno tipko miške kliknite PopupMenu (pod obrazcem) in na vrhu obrazca se bo prikazal Kontekstni meni, kjer se prikaže običajni urejevalnik menijev. Kliknite in kjer piše Type Type Here, vnesite Remove Item. V oknu lastnosti se prikaže MenuItem, ki ga preimenujete v mniRemove. Dvokliknite to postavko v meniju in dobili boste funkcijo kodo upravljalca dogodkov menuItem1_Click. Dodajte to kodo tako, da izgleda tako.
Če ne pozabite na Odstrani element, samo kliknite na gumb PopupMenu pod obrazcem v obrazcu Oblikovalec. To bo znova postavilo v oči.
Če pa ga zaženete in ne dodate elementa in ga ne izberete, ko z desno miškino tipko kliknete in odprete meni in kliknete Odstrani element, bo to izjema, ker ni izbranega predmeta. To je slabo programiranje, zato je tu, kako ga odpravite. Dvokliknite pojavni dogodek in dodajte to vrstico kode.
DataGridView je najbolj zapletena in najbolj uporabna komponenta, ki je brezplačno na voljo s C #. Deluje tako z viri podatkov (tj. Podatki iz baze podatkov) kot brez (tj. S podatki, ki jih dodate programsko). Za preostanek te vadbe bom prikazal uporabo brez virov podatkov. Za enostavnejše potrebe po prikazu se vam zdi bolj primeren ListView.
Če ste uporabili starejši nadzor DataGrid, potem je to le eden izmed steroidov: omogoča vam več vgrajenih vrst stolpcev, lahko delate z notranjih in zunanjih podatkov, več prilagoditve zaslona (in dogodkov) in daje večji nadzor nad ravnanjem s celicami z zamrzovalnimi vrsticami in stolpcev.
Ko oblikujete obrazce s podatki omrežja, je običajno določiti različne vrste stolpcev. V enem stolpcu lahko imate potrditvena polja, v drugem samo za branje ali za urejanje besedila in številke tečajev. Ti tipi stolpcev so ponavadi tudi poravnani s številkami, ki so na splošno poravnane po desni, tako da so decimalne točke navzgor. Na ravni stolpcev lahko izbirate med gumbom, potrditvenim poljem, ComboBoxom, sliko, besedilom in povezavami. če teh ni dovolj, lahko izničite svoje lastne vrste.
Najlažji način dodajanja stolpcev je oblikovanje v IDE. Kot smo videli že pred tem, piše kodo samo za vas, in ko jo naredite nekajkrat, boste morda raje sami dodali kodo. Ko to storite nekajkrat, vam nudi vpogled v to, kako to storiti programsko.
Začnimo z dodajanjem nekaj stolpcev, na obrazec spustimo DataGridView in v zgornjem desnem kotu kliknemo puščico. Nato kliknite Dodaj stolpec. To naredite trikrat. Odprlo se bo pogovorno okno Dodaj stolpec, kjer nastavite ime stolpca, besedilo, ki bo prikazano na vrhu stolpca, in omogočilo izbiro njegove vrste. Prvi stolpec je YourName in je privzeti TextBox (dataGridViewTextBoxColumn). Besedilo glave nastavite tudi na svoje ime. Naredite drugi stolpec Age in uporabite ComboBox. Tretji stolpec je dovoljen in je stolpec CheckBox.
Po dodajanju vseh treh morate videti vrstico treh stolpcev s kombinacijo v srednjem (Starost) in potrditveno polje v stolpcu Dovoljeno. Če kliknete DataGridView, potem v inšpektorju lastnosti poiščite stolpce in kliknite (zbirka). Prikaže se pogovorno okno, v katerem lahko nastavite lastnosti za vsak stolpec, kot so posamezne barve celice, besedilo orodja, širina, najmanjša širina itd. Če sestavite in zaženete, boste opazili, da lahko spremenite širino stolpcev in čas izvajanja. V inšpektorju lastnosti za glavni DataGridView lahko nastavite AllowUser za spreminjanje velikosti stolpcev na napačno, da to preprečite.
Vrsticam bomo dodali vrstice v nadzor DataGridView v kodi in ex3.cs v datoteki z primeri ima to kodo. Začenši z dodajanjem polja TextEdit, ComboBox in gumba v obrazec s DataGridView na njem. Nastavite lastnost DataGridView AllowUserto AddRows na false. Uporabljam tudi nalepke in jih kličem combobox cbAges, gumb btnAddRow in TextBox tbName. Za obrazec sem dodal tudi gumb za zapiranje in ga dvakrat kliknil, da ustvari okostnik bralnika dogodka btnClose_Click. Če temu dodate besedo Close (), to deluje.
Lastnost z gumbom Dodaj vrstico je na začetku nastavljena na napačno vrednost. Nočemo vrstic v DataGridView, razen če je v polju Name TextEdit in v ComboBoxu besedilo. Ustvaril sem metodo CheckAddButton in nato ustvaril obdelovalec dogodkov Leave za urejevalno polje Name Text Text tako, da dvakrat kliknem ob besedo Leave in Properties, ko je prikazoval dogodke. Polje Lastnosti to prikazuje na zgornji sliki. Privzeto polje Lastnosti prikazuje lastnosti, vendar lahko s klikom na gumb strele prikažete obdelovalce dogodkov.
Lahko namesto tega uporabite dogodek TextChanged, čeprav bo to poklical CheckAddButton () metoda za vsako stiskanje tipke, ne pa kadar je nadzor nad tem, ko je drug nadzor osredotočenost. V skupini Ages sem uporabil dogodek TextChanged, vendar sem izbral obdelovalec dogodkov tbName_Leave, namesto da bi dvakrat kliknil, da sem ustvaril nov upravljavec dogodkov.
Niso vsi dogodki združljivi, ker nekateri dogodki ponujajo dodatne parametre, če pa vidite predhodno ustvarjen obdelovalec, da, lahko to uporabite. Večinoma gre za preferenco, lahko imate za vsako kontrolo ločen upravljavec dogodkov z uporabo ali skupno rabo obdelovalcev dogodkov (kot sem to storil), kadar imajo skupni podpis dogodka, tj. parametri so enako.
Komponento DataGridView sem zaradi kratkostičnosti preimenoval v dGView in dvakrat kliknil AddRow, da sem ustvaril okostje upravljalca dogodkov. Spodaj ta koda doda novo prazno vrstico, pridobi indeks vrstic (to je RowCount-1, kot je pravkar dodan, RowCount pa 0 temelji) in nato dostopa do te vrstice prek svojega indeksa in v stolpcih te vrstice v stolpcih YourName in. nastavi vrednosti Starost.
Pri načrtovanju obrazca morate razmisliti o vsebnikih in kontrolnih skupinah ter o tem, katere skupine kontrol naj bodo skupaj. V zahodnih kulturah ljudje tako ali tako berejo od zgornje leve do spodnje desne, zato jo lažje berejo.
Posoda je kateri koli od elementov, ki lahko vsebujejo druge kontrole. Tisti, ki jih najdemo v Orodjarni, vključujejo Panel, FlowLayoutpanel, SplitContainer, TabControl in TableLayoutPanel. Če orodja ni mogoče videti, uporabite meni Pogled in ga boste našli. Kontejnerji držijo krmilne elemente skupaj, in če premaknete ali spremenite velikost vsebnika, bo to vplivalo na položaj krmilnikov. Preprosto premaknite nadzor nad vsebnikom v Oblikovalniku obrazcev in prepoznal bo, da je Container zdaj zadolžen.
Panel je podoben kot GroupBox, vendar se GroupBox ne more pomikati, vendar lahko prikaže napis in ima privzeto obrobo. Plošče imajo lahko obrobe, privzeto pa ne. Uporabljam GroupBoxe, ker izgledajo lepše in to je pomembno, ker:
Plošče so priročne tudi za razvrščanje vsebnikov, tako da lahko na plošči imate dva ali več GroupBox-ov.
Tukaj je nasvet za delo s posodami. Na obrazec spustite Split Container. Kliknite levo ploščo in nato desno. Zdaj poskusite in odstranite SplitContainer iz obrazca. Težko je, dokler z desno miškino tipko ne kliknete na eno od plošč in nato kliknite Izberi SplitContainer1. Ko je vse izbrano, ga lahko izbrišete. Drug način, ki velja za vse kontrole in posode je zadeti tipko Esc izbrati starša.
Zabojniki lahko gnezdijo tudi drug v drugem. Samo povlecite majhno na večjo in videli boste tanko navpično črto, ki bo na kratko pokazala, da je ena znotraj druge. Ko povlečete nadrejeni vsebnik, se otrok premakne z njim. Primer 5 prikazuje to. Svetlo rjava plošča privzeto ni v vsebniku, zato se s klikom gumba za premikanje GroupBox premakne, plošča pa ne. Zdaj povlecite ploščo čez GroupBox, tako da je popolnoma znotraj Groupboxa. Ko tokrat sestavite in zaženete, se s klikom gumba Premakni premakneta skupaj.
TableLayoutpanel je zanimiv zabojnik. To je struktura tabel, organizirana kot 2D mreža celic, kjer vsaka celica vsebuje samo en nadzor. V celici ne morete imeti več kontrolnikov. Določite lahko, kako raste tabela, ko je dodanih več kontrol ali tudi če ne raste, se zdi tabela po HTML-ju oblikovana, ker lahko celice obsegajo stolpce ali vrstice. Celo vedenje nadzora otrok v posodi je odvisno od nastavitev roba in oblazinjenja. Več o sidrih bomo videli na naslednji strani.
Na primer Ex6.cs, začel sem z osnovno tabelo z dvema stolpcema in določil prek pogovornega okna Control and Row Styles (izberite kontrolnik in kliknite gumb desni kazalni trikotnik v zgornjem desnem kotu, da si ogledate seznam opravil in kliknete zadnjega), da je levi stolpec 40%, desni stolpec pa 60% premer. Omogoča vam, da določite širino stolpcev v absolutnih slikovnih točkah, v odstotkih, ali pa ga preprosto pustite samodejno. Hitrejši način za to pogovorno okno je samo, da kliknete Zbirka poleg stolpcev v oknu z lastnostmi.
Dodal sem gumb AddRow in lastnost GrowStyle pustil s privzeto vrednostjo AddRows. Ko se tabela napolni, doda drugo vrstico. Lahko pa nastavite njegove vrednosti na AddColumn in FixedSize, tako da ne more več rasti. V programu Ex6, ko kliknete gumb Add Controls, trikrat pokliče metodo AddLabel () in enkrat AddCheckBox (). Vsaka metoda ustvari primerek kontrole in nato pokliče tblPanel. Kontrole. Dodaj () Po dodajanju 2. kontrole tretji nadzor povzroči rast tabele. Slika prikazuje, ko enkrat pritisnete gumb Dodaj nadzor.
Če se sprašujete, od kod prihajata privzete vrednosti v metodah AddCheckbox () in AddLabel (), ki jih kličem, je bil nadzor prvotno ročno dodan tabeli oblikovalca, nato pa je bila koda za njegovo ustvarjanje in inicializacijo kopirana znotraj tega regija. Inicializacijsko kodo najdete v klicu metode InitializeComponent, ko kliknete + levo od Spodnje regije:
Izberete lahko več elementov hkrati, tako da držite pritisnjeno tipko Shift, ko izberete drugi in naslednji nadzor, tudi tipke različnih vrst. Okno Lastnosti prikazuje samo tiste lastnosti, ki so skupne obema, tako da jih lahko nastavite na enako velikost, barvo in besedilno polje itd. Tudi isti upravljavci dogodkov so lahko dodeljeni več kontrolnikom.
Glede na uporabo bo uporabnik pogosto spreminjal velikost nekaterih obrazcev. Nič ni videti slabše od spreminjanja velikosti obrazca in gledanja kontrolnikov, da ostanejo v istem položaju. Vsi elementi za upravljanje imajo sidra, s pomočjo katerih jih lahko "pritrdite" na 4 robove, tako da se kontrolnik premakne ali raztegne, ko se pritrjeni rob premakne. To vodi do naslednjega vedenja, ko se oblika raztegne z desnega roba:
Za gumbe, kot je Close, ki so običajno v spodnjem desnem kotu, je potrebno vedenje 3. ListViews in DataGridViews sta najboljši z 2, če je število stolpcev dovolj, da prelijete obrazec in potrebuje drsanje). Zgornja in leva sidra sta privzeta. V oknu nepremičnin je urejen čudovit urejevalnik, ki je podoben angleški zastavi. Samo kliknite katero od palic (dve vodoravni in dve navpični), da nastavite ali počistite ustrezno sidro, kot je prikazano na zgornji sliki.
Ena lastnost, ki se ne omenja veliko, je lastnost Tag in kljub temu je lahko zelo uporabna. V oknu z lastnostmi lahko dodelite samo besedilo, v kodi pa lahko poljubno vrednost, ki izhaja iz predmeta.
Tag sem uporabil za držanje celotnega predmeta, medtem ko je v ListViewu prikazal le nekaj njegovih lastnosti. Na primer, morda želite prikazati samo ime in številko stranke na seznamu strank. Toda z desno miškino tipko kliknite na izbrano stranko in nato odprite obrazec z vsemi podrobnostmi stranke. To je enostavno, če sestavite seznam strank tako, da v pomnilniku preberete vse podrobnosti o stranki in dodelite sklic na objekt razreda kupcev. Vsi elementi nadzora imajo oznako.
TabControl je priročen način za prihranek prostora v obrazcu z več zavihki. Vsak zavihek ima lahko ikono ali besedilo in lahko izberete kateri koli zavihek in prikažete njegove kontrole. TabControl je vsebnik, vendar vsebuje samo TabPages. Vsaka TabPage je tudi posoda, ki ji lahko dodajo običajne kontrole.
Na primer x7.cs, ustvaril sem ploščo z dvema zavihkoma s prvim jezičkom z imenom Controls s tremi gumbi in na njem potrditveno polje. Druga stran z zavihki je označena z Dnevniki in se uporablja za prikaz vseh zabeleženih dejanj, vključno s klikom gumba ali preklopom potrditvenega polja. Za beleženje vsakega klika gumba itd. Se pokliče metoda, imenovana Log (). Priložen niz doda v ListBox.
Na običajen način sem v TabControl dodal tudi dva pojavna menija z desnim klikom. Najprej dodajte ContextMenuStrip v obrazec in ga nastavite v lastnost ContextStripMenu v TabControl. Izbira dveh menijev sta Dodaj novo stran in Odstrani to stran. Vendar sem omejitev odstranjevanja strani omejil, tako da lahko odstranite samo novo dodane strani z zavihki in ne prvotni dve.
To je enostavno, samo ustvarite novo stran z zavihki, dodajte besedilo napisom za zavihek in ga nato dodajte v zbirko TabPages Tabs TabControl
Odstranjevanje strani je samo stvar poklica TabPages. RemoveAt (), z zavihki. SelectedIndex, da dobite trenutno izbrano kartico.
V tej vadnici smo videli, kako delujejo nekatere bolj zapletene kontrole in kako jih uporabljati. V naslednji vadnici bom nadaljeval s temo GUI in si ogledal nit delavca v ozadju in pokazal, kako ga uporabljati.