Vizuális programozás Szoftvertechnológia I. Párbeszédablakok és vezérlők C#
Form - Hogyan hozzuk létre? Új projekt létrehozásakor egy üres formot kapunk További form létrehozása 1. Jobb egérkattintás a projekten Solution Explorer-ben 2. Add 3. Add Windows Forms
Tulajdonságok beállítása Események Form neve Kategóriák szerint ABC sorrendben Leírás 3
Eseménykezelés Események 4
Esemény modell a .Net keretrendszerben Button1 this.button1.Click += new System.EventHandler(this.button1_Click); this.button1.Click += new System.EventHandler(this.button1_Click); A metódusreferencia meghívja a hozzárendelt metódust private void button1_Click(object sender, System.EventArgs e) { … } Meghívja a metódusreferenciát Metódusreferencia (delegate)
Windows Forms Designer – Automatikusan előállított kód partial class 6
Saját kód – partial class
Hogyan tegyünk vezérlőt a formra? 8
Hogyan lássuk el menüvel a formot? 9
Controls Toolbox beállítása Jobb-egérgomb a Toolbox-on 1 Choose Items 2 .NET Framework fül. Komponens kiválasztása. 3 10
Vezérlők elrendezése Elrendezés a Format menüvel és eszköztárral Tabulátor sorrend beállítása Vezérlő lehorgonyzása Dokkolás
GroupBox és Panel vezérlő használata Helyezzünk el további vezérlőket rajta 2 Helyezzünk el egy panelt vagy egy csoportablakot a formon (Panel vagy GroupBox) 1 Korábban a formra helyezett vezérlőket is ráhúzhatunk 3 A Panel vezérlő görgetősávokkal is rendelkezhet (AutoScrollbar=True) 4 A GroupBox címsorral is rendelkezhet (Text=címszöveg) 5
Példaalkalmazás a csoportablak és a jelölőnégyzet használatára
Állapotsor (StatusStrip) StatusStrip a formra Legördülő listából állapotsor elem választás Második lépés ismétlése Állapotsor elemek átnevezése Kijelölés majd Properties vagy Állapotsor kijelölése/Properties/Items
Állapotsor elemeinek beállítása
Szöveg beállítása programból ssÁllapotsor.Items[0].Text= ”Első”;
Állapotsor és választógomb használata Példaalkalmazás Állapotsor és választógomb használata
Menü MenuStrip komponens ablakra helyezése Szokásos menüpontok automatikusan Megadás kézzel Minden menüpont egy önálló objektum saját tulajdonságokkal és eseményekkel
Menü tulajdonságok használata
Gyorsító billentyű, kiválasztó pipa, engedélyezés
Fontosabb események DropDownOpening – mielőtt lenyílna Click Mintaalkalmazás
Windows Forms vezérlők http://msdn.microsoft.com/en-us/library/8w7ed3ba(VS.71).aspx Windows Forms vezérlők
Listaablak (ListBox) vezérlő használata Elemek hozzáadása tervezési időben: Items tulajdonság – String Collection Editor
Listaablak kezelése Listaablak feltöltése futási időben string[] nevek= {"Alma", "Körte", "Banán", "Narancs"}; lbListaablak.Items.AddRange(nevek); Kijelölt elem lekérdezése tbListaelem.Text= (string)lbListaablak.SelectedItem;
Tulajdonságok A listában szereplő elemek száma. Items.Count A kiválasztott elem sorszáma (0-tól kezd). vagy -1, ha nincs kiválasztva egy sem. SelectedIndex Egy vagy több listaelem választható ki egyszerre. SelectionMode A görgető sáv mindig látható. ScrollAlwaysVisible Többoszlopos megjelenítés engedélyezése. MultiColumn Leírás Tulajdonság
Metódusok Binds the ListBox to a name of the column in the Data source. DisplayMember Binds the ListBox to a data source. DataSource Elemek eltávolítása. Items.Remove/Items.Clear Elemek hozzáadása. Items.Add/ Items.Insert Leírás Metódusok
Listaablak használata Példaalkalmazás Listaablak használata
Eszköztár készítése és használata ToolStrip komponens formra helyezése Eszköztár elemek létrehozása legördülő listából történő választással Feliratos nyomógomb: DisplayStyle=Text, Text=felirat Ikonos nyomógomb: DisplayStyle=Image, Image=… BMP fájlok szabványos ikonok az eszköztárra: jobb egérgomb az eszköztáron, Insert Standard Items
Eseménykezelés Click esemény A nyomógombhoz ugyanazt az eseménykezelőt kell hozzárendelni, mint amit a megfelelő menüponthoz rendeltünk
Drag & Drop
Fogd és vidd Két szövegmező, a felsőből húzzuk át a szöveget az alsóba Az alsóban az AllowDrop=True kell legyen Eseménykezelés az eredeti helyen (felső szövegmező): MouseDown – egérgomb lenyomás elindítjuk a műveletet TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy);
Fogd és vidd Eseménykezelés a cél helyen: DragEnter – az egérrel a felhasználó bevonszolt valamilyen objektumot a szövegmező területére ellenőrizzük a tartalom formátumát és engedélyezzük a műveletet if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; DragDrop – a felhasználó elengedte az egérgombot az átvonszolt szöveget megjelenítjük a cél szövegmezőben
MDI alkalmazások létrehozása SDI és MDI alkalmazások MDI alkalmazások létrehozása Szülő és gyermek formok kapcsolata Gyakorlat: MDI alkalmazás létrehozása
SDI és MDI alkalmazások Csak egy dokumentum látható Egyszerre több dokumentum látható Csak a dokumentum bezárása után nyitható meg egy újabb dokumentum Mindegyik dokumentum saját ablakban van megjelenítve 34
MDI alkalmazások létrehozása Szülő form létrehozása Új projekt létrehozása IsMdiContainer tulajdonság True-ra állítása Menüpont a gyermek form megjelenítéséhez Gyermek form létrehozása Project/Add Windows Form Gyermek form meghívása a szülő form-ból protected void MenuItem2_OnClick(object sender, System.EventArgs e) { // Gyermek form létrehozása. Form2 újGyermek = new Form2(); // Szülő form beállítása. újGyermek.MdiParent = this; // Gyermek form megjelenítése. újGyermek.Show(); } 35
Szülő és gyermek formok kapcsolata Gyermekablakok listája Ablak menü létrehozása, a főmenü objektumban: MdiWindowListItem=ablak menüpont objektum neve Az aktív MDI gyermekablak beazonosítása ActiveMdiChild tulajdonság Gyermekablakok elrendezése LayoutMdi metódus meghívása Form aktívGyermek = this.ActiveMdiChild; 36
MDI alkalmazás létrehozása
Párbeszédablakok használata Windows Forms alkalmazásokban Előre definiált párbeszédablakok Visual Studio .NET-ben Párbeszédablakok megjelenítése DialogResult tulajdonság Adatbevitel párbeszédablakon keresztül Példaalkalmazás
Előre definiált párbeszédablakok Visual Studio .NET-ben OpenFileDialog Állomány megnyitásakor hely és név megadása SaveFileDialog Állomány mentésekor hely és név megadása ColorDialog Színválasztás palettáról és újabb színek hozzáadása a palettához FontDialog A rendszerben telepített fontok megtekintése és betűtípus beállítás PrintDialog Nyomtató kiválasztása és nyomtatással kapcsolatos beállítások PageSetupDialog Oldalbeállítás nyomtatáshoz PrintPreviewDialog Úgy jeleníti meg a dokumentumot, ahogyan az a nyomtatás eredményeképpen látható lesz
Párbeszédablakok megjelenítése Előre definiált párbeszédablak megjelenítése Visual Studio .NET-ben private void button1_Click(object sender, System.EventArgs e) { OpenFileDialog1.ShowDialog(); } Üzenetablak megjelenítése public void PerformCalculations() { MessageBox.Show ("Művelet végrehajtva", "Jelentés",MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk); }
DialogResult DialogResult A visszatérési érték adja meg, hogy mely gombbal zárta be az ablakot a felhasználó DialogResult.Cancel jelzi, hogy a felhasználó a Mégse gombon kattintott Példa Ha készítünk egy párbeszédablakot, annak lezárását nyomógombokkal (OK, Mégse, stb.) oldjuk meg. Ezek DialogResult tulajdonsága határozza meg, hogy milyen értékkel tér vissza a ShowDialog(). A DialogResult tulajdonság tervezési és futási időben is beállítható.
Adatbevitel párbeszédablakon keresztül Eredmények kiolvasása a párbeszédablakból és felhasználásuk Ha OK, Megnyit, Mentés, stb. gombbal zárta le a felhasználó a párbeszédablakot, akkor 1 Kiolvassuk a párbeszédablak objektum egy vagy több tulajdonságát 2 public void DisplayValue() { string Útvonal; DialogResult Eredmény = openFileDialog1.ShowDialog(); if (Eredmény == DialogResult.OK) { Útvonal = openFileDialog1.FileName.ToString(); MessageBox.Show("A kiválasztott állomány: '" + Útvonal + "'", "Kiválasztás", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } …
Beépített párbeszédablak használata - mintaprogramok BeepitettPbtext Beepitett
Vezérlők elhelyezése az ablakon futási időben
Controls gyűjtemény Vezérlő objektumok gyűjteménye Add, Remove és RemoveAt metódusokkal bővítjük vagy szűkítjük a gyűjtemény A Contains metódus adja meg, hogy egy vezérlő tagja-e a gyűjteménynek
Fontosabb metódusok Egy iterátort ad vissza, amivel végiglépkedhetünk a gyűjteményen. GetEnumerator Visszaadja a megadott vezérlő sorszámát. IndexOf Visszaad egy String-et, ami az aktuális objektumot reprezentálja. ToString Eltávolítja az indexxel megadott sorszámú egy vezérlőt. RemoveAt Vezérlő eltávolítása a gyűjteményből Remove Visszaadja, hogy egy adott vezérlő tagja-e a gyűjteménynek. Contains Az összes vezérlő eltávolítása a gyűjteményből. Clear Vezérlő tömb hozzáadása a vezérlő gyűjteményhez. AddRange Egy vezérlő hozzáadása a vezérlő gyűjteményhez. Add Leírás Metódus
Vezérlők elhelyezése a formon futási időben Lépések A vezérlő létrehozása 1 CheckBox értesítésCheckBox = new CheckBox(); // tulajdonságok beállítása signatureCheckBox.Text = "Kér értesítést"; signatureCheckBox.Left = 24; signatureCheckBox.Top = 80; A szerkezeti (elrendezési) logika kikapcsolása a tárolón. Itt a tároló egy csoportablak. 2 GroupBox1.SuspendLayout();
Vezérlők elhelyezése a formon futási időben Lépések Vezérlő hozzáadása a tárolóhoz (container) a Controls tulajdonság Add metódusával. 3 // az új vezérlő hozzáadása a gyűjteményhez GroupBox1.Controls.Add(signatureCheckBox); A szerkezeti (elrendezési) logika kikapcsolása a megcélzott tároló komponensen. 4 groupBox1.ResumeLayout(true);
Példaalkalmazás VezerlokFutasidoben
Menü létrehozása Gyorsmenü formhoz rendelése Menüelemek hozzáadása futásidőben Eseménykezelők készítése a menüelemekhez Menü tulajdonságok használata Gyakorlat: Menüfrissítés futásidőben
Gyorsmenü formhoz rendelése futásidőben1 ContextMenuStrip objektum létrehozása this.ContextMenuStrip = new ContextMenuStrip(); Menüpontok elhelyezése a felbukkanó menüben this.ContextMenuStrip.Items.Add("Új" + this.ContextMenuStrip.Items.Count.ToString()); Eseménykezelő feliratkozása this.ContextMenuStrip.ItemClicked += new ToolStripItemClickedEventHandler( cmsGyorsMenü_ItemClicked);
Gyorsmenü formhoz rendelése futásidőben2 Eseménykezelő függvény megírása private void cmsGyorsMenü_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { switch (e.ClickedItem.ToString()) { case "Új0": MessageBox.Show("A kiválasztott menüpont: Új0"); break; case "Új1": MessageBox.Show("A kiválasztott menüpont: Új1"); case "Új2": MessageBox.Show("A kiválasztott menüpont: Új2"); }
Példaalkalmazás GyorsMenu
Felhasználói adatbevitel ellenőrzése A vezérlők ellenőrzése a Validating esemény felhasználásával Példaalkalmazás: TextBox komponens használata Az ErrorProvider vezérlő használata Példaalkalmazás: TextBox komponens használata ErrorProvider-rel
Validating esemény Azelőtt következik be mielőtt a vezérlő elveszítené az input fókuszt Ha a vezérlő CausesValidation tulajdonsága True-ra van állítva (ez az alapértelmezett) Szabályozhatjuk, hogy mikor kerülhet át a fókusz egy másik vezérlőre
e.Cancel használata
Példaalkalmazás: TextBox komponens használata Validalas
ErrorProvider vezérlő Hibákat jelenít meg a formon keresztül történő felhasználói adatbevitel ellenőrzése során Hibákat jelenít meg egy adathalmazban (dataset) Kulcs tulajdonságok Kulcs metódusok DataSource ContainerControl Icon SetError
ErrorProvider Érvénytelen bevitt adat esetén hibaüzenet megjelenítését teszi lehetővé Előnye: az érintett vezérlő mellett megjelenik egy hibaikon Ha a felhasználó az ikon felé helyezi az egérkurzort, egy gyorstippben megjelenik a hibaüzenet
Fontos tulajdonságok ContainerControl – ez tartalmazza az ErrorProvider-t DataSource – egy adathalmazzal kapcsolatos hibát jelenít meg az ErrorProvider Icon – választott ikon az alapértelmezett helyett
Példaalkalmazás: ErrorProvider Fontos metódusok SetError – meghatározza, hogy melyik vezérlő mellett jelenjen meg az ikon és, hogy mi legyen a hibaüzenet szövege Példaalkalmazás: ErrorProvider
Managed Spy http://msdn.microsoft.com/msdnmag/issues/06/04/ManagedSpy/