[[:oktatas:programozás:csharp|< CSharp]] ====== GUI Windows.Forms ====== Windowsos alkalmazások létrehozása ===== Egy ablak létrehozása ===== using System; using System.Windows.Forms; class Program { static void Main() { Form ablak = new Form(); ablak.Width = 800; ablak.Height = 600; ablak.Show(); Application.Run(); } } A fenti program egy 800x600-as ablakot jelenít meg. ===== WinForms ===== Egyablakos program létrehozása, egyetlen gombbal. ==== Forrás ==== using System; using System.Drawing; using System.Windows.Forms; public class Form1 : Form { Button gomb = new Button(); public Form1() { gomb.Text = "Kattints ide"; gomb.Location = new Point(112, 50); gomb.Click += new EventHandler(Button_Click); Controls.Add(gomb); } static public void Main() { Application.Run(new Form1()); } private void Button_Click(object sender, EventArgs e) { MessageBox.Show("Gomb lenyomva"); } } ==== Fordítás ==== === MS .Net === csc /r:System.Windows.Forms,System.Drawing prog.cs Windows alatt megszoktunk adni még egy kapcsolót, hogy a parancssoros ablak ne jöjjön fel: /t:winexe csc /r:System.Windows.Forms,System.Drawing /t:winexe prog.cs === Mono 1.0 === mcs -r:System.Windows.Forms -r:System.Drawing prog.cs === Mono 2.0 === gmcs -r:System.Windows.Forms -r:System.Drawing prog.cs === Mono 4.0 === dmcs ... === Mono 6.x === mcs -r:System.Windows.Forms -r:System.Drawing prog.cs ==== Elemzés ==== Magyarázat a megjegyzések formájában a kódban: using System; using System.Drawing; // A komponens helyének megadásához kell using System.Windows.Forms; // Maga a Form osztály használatához kell. public class Form1 : Form { Button gomb = new Button(); public Form1() { gomb.Text = "Kattints ide"; // A gomb szövegét adjuk meg gomb.Location = new Point(112, 50); // A gomb helyét határozzuk meg gomb.Click += new EventHandler(Button_Click); // Megadjuk milyen metódus hajtódjon végre egy Click eseményre. Controls.Add(gomb); // A gombot az ablakhoz adjuk } static public void Main() { Application.Run(new Form1()); // A program indítása (Esemény hurokba helyezzük) } // Az kattintásra bekövetkező esemény private void Button_Click(object sender, EventArgs e) { MessageBox.Show("Gomb lenyomva"); //Egy üzenetablakot jelenít meg az idézőjelek közötti szöveggel. } } ===== Form tulajdonságai ===== ==== Minimális tulajdonságok ==== using System; using System.Drawing; using System.Windows.Forms; public class Form1: Form { public Form1() { this.Text = "Valami"; // Az ablak címsora this.StartPosition = FormStartPosition.CenterScreen; // A képernyő közepére igazítás this.Height = 600; // Az ablak magassága this.Width = 800; // Az ablak szélessége } static public void Main() { Application.Run(new Form1()); } } ==== További tulajdonságok és metódusok ==== Opacity = 0.5d; // Átlátszóság CenterToScreen(); // Középre igazítás BackColor = Color.Blue; //Háttér szín (ablak színe) ForeColor = Color.White; //Előtér színe (pl. egy címke feliratának színe. SizeGripStyle = SizeGripStyle.Show; //Show, Auto, Hide; Bal alsó méretező megjelenítése BackgroundImage = Image.FromFile("feherhatter.png"); //Háttérkép beállítása TransparencyKey = BackColor; //Átlátszó színe beállítása, esetleg: Color.White vagy más. TopMost = true; // Mindig felül AutoScaleBaseSize = new Size(100, 100); //automatikus méretezés alapmérete AutoScroll = true; // Automatikus görgetési képesség AutoScrollMargin = new Size(50, 50); // Az automatikus görgetéshez használt margó mérete AutoScrollMinSize = new Size(50, 50); // Az automatikus görgetéskor látható terület legkisebb mérete AutoScrollPosition = new Point(50, 50); // Az automatikus görgetéskor látható terület helyzete ClientSize = new Size(200,200); // Az ablak belső területének mérete (ezt inkább lekérdezni szokás) DefaultSize // Csak lekérdezhető DesktopBounds = //Az ablak helye és mérete DesktopLocation = new Point(400, 400); //Az ablak helye MaximumSize = new Size(800, 600); // Legnagyobb méret MinimumSize = new Size(800,600); //Minimális méret StartPosition = FormStartPosition.WindowsDefaultLocation; // CenterParent, CenterScreen, WindowsDefaultBounds : alapértelmezett helyzet // WindowsDefaultLocation : alapértelmezett helyezet, megadott méretekkel ControlBox = false; //Címsort elrejtése TopMost = true; //Mindig felül Méret és hely beállítása a Size és Point konstruktorral: Size = new Size(800, 600); Location = new Point(10,10); A hozzátartozó osztályok a System.Drawing névtérben vannak. ==== Az ablak szegély típusának megadása ==== Az ablakszegélyt a FormBorderStyle felsorolt típussal állíthatjuk be: enum FormBorderStyle A FormBorderStyle tagjait a következő táblázat tartalmazza. ^ Tag neve ^ Leírás ^ | None | Nincs szegély | | FixedSingle | Egy fix, egyszerű vonalszegély | | Fixed3D | Egy fix háromdimenziós szegély | | FixedDialog | A vékony, fix párbeszéd típusú szegély | | Sizable | Méretezhető szegély | | FixedToolWindow | Egy eszközablak szegély, amely nem átméretezhető. Az eszközablak nem jelenik meg a feladatkezelőben vagy az Alt + Tab billentyűkombinációra. A feladatkezelőben való megjelenés tipikus a FixedToolWindow esetén, de más ablak esetén is beállítható a ShowInTaskbar tulajdonság false értékre állításával. Alapértelmezetten ez true. | | SizableToolWindow | Méretezhető eszköz-ablakszegély. Egy eszközablak nem jelenik meg az feladatkezelőben vagy az Alt + Tab billentyűkombinációra. | Használata: FormBorderStyle = FormBorderStyle.Fixed3D; ==== Ablakméret fix ==== Size = new Size(300, 300); MinimumSize = Size; MaximumSize = Size; Különböző képernyőmérethez igazítás private void dynamicSizeForm_Load(System.Object sender, System.EventArgse) { Screen scr = Screen.PrimaryScreen; this.Left = (scr.WorkingArea.Width – this.Width) / 2; this.Top = (scr.WorkingArea.Height – this.Height) / 2; } ==== Load esemény ==== Amikor létrehozunk egy Program osztályt, amely a Form osztályt örökli, a konstruktor: Program() A konstruktor akkor hajtódik végre, amikor az ablakot (formot) létrehozzuk. Az ablakhoz rendelhetünk egy Load eseményt. Ez mindig a létrehozás után következik be. Load += new EventHandler(Form1_Load); vagy Load += Form1_Load; private void Form1_Load(object sender, EventArgs e) { // Ami betöltődésnél szeretnénk. } ===== Label ===== Label cimke = new Label() cimke.Text = "Szöveg"; cimke.Top = 100; cimke.Left = 100; ==== Igazítás ==== Az egyes komponensek szövegének igazítása a ContentAlignment felsorolt típussal történik. A ContentAlignment a System.Drawing névtérben található. | TopLeft | A tartalom függőlegesen felülre és vízszintesen balra. | | TopCenter | A tartalom függőlegesen felülre vízszintesen középre. | | TopRight | A tartalom függőlegesen felülre, vízszintesen jobbra. | | MiddleLeft | A tartalom függőlegesen középre, vízszintesen balra. | | MiddleCenter | A tartalom függőlegesen középre, vízszintesen középre. | | MiddleRight | A tartalom függőlegesen középre, vízszitnesen jobbra. | | BottomLeft | A tartalom függőlegesen lent, vízszintesen balra. | | BottomCenter | A tartalom függőlegesen lent, vízszintesen középre. | | BottomRight | A tartalom függőlegesen lent, vízszintesen jobbra. | Használata egy cimke1 objektum esetén: cimke1.TextAlign = ContentAlignment.MiddleCenter; ===== Button ===== Gombesemények button1.MouseLeave += new System.EventHandler(Button1_MouseLeave); button1.Click += new System.EventHandler(Button1_Click); button1.MouseEnter += new System.EventHandler(Button1_MouseEnter); button1.MouseHover += new System.EventHandler(Button1_MouseHover); button1.MouseUp += new System.Windows.Forms.MouseEventHandler(Button1_MouseUp); button1.MouseDown += new System.Windows.Forms.MouseEventHandler(Button1_MouseDown); ===== TextBox ===== ==== A TextBox-ról ==== Szöveg doboz. Alapesetben egy soros. A Multiline tulajdonság true értékre állításával a doboz magassága is megadható vagy a Dock tulajdonsággal az ablak egy oldalához köthető. ==== TextBox példa ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { TextBox textbox1; Program() { Width=800; Height=600; CenterToScreen(); textbox1 = new TextBox(); textbox1.Location = new Point(200, 200); textbox1.Multiline = true; textbox1.ScrollBars = ScrollBars.Vertical; textbox1.Dock = DockStyle.Fill; textbox1.AcceptsReturn = true; textbox1.AcceptsTab = true; textbox1.WordWrap = true; Controls.Add(textbox1); } static void Main() { Application.Run(new Program()); } } ==== Egyéb tulajdonságok ==== Egy újabb karaktersorozat hozzáfűzése a szövegdobozhoz: textbox1.AppendText = "Szöveg"; textbox1.TabIndex = 0; Jelszókarakter beállítása: textbox1.PasswordChar = '*'; Maximális karakterszám beállítása textBox1.MaxLength = 14; textbox1.SelectionStart = 0; textbox1.SelectionLength = 0; textbox1.BackColor = Color.Red; textbox1.ForeColor = Color.Blue; textbox1.BorderStyle = BorderStyle.FixedSingle; ==== A TextBox eseményei ==== A fókusz elvesztése textbox1.LostFocus += new System.EventHandler(Textbox1_LostFocus); A fókusz megkapása: textbox1.GotFocus += new System.EventHandler(Textbox1_GotFocus); textbox1.KeyUp += new System.Windows.Forms.KeyEventHandler(Textbox1_KeyUp); textbox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(Textbox1_KeyPress); textbox1.TextChanged += new System.EventHandler(Textbox1_TextChanged); textbox1.KeyDown += new System.Windows.Forms.KeyEventHandler(Textbox1_KeyDown); Egy lehetésges kezelő private void Textbox1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { MessageBox.Show("Enter"); } else if (e.KeyCode == Keys.Escape) { MessageBox.Show("Escape"); } } Megváltozott tartalom: using System; using System.Drawing; using System.Windows.Forms; using System.Text.RegularExpressions; class Program01 : Form { TextBox rBox = new TextBox(); TextBox hBox = new TextBox(); Label rLabel = new Label(); Label hLabel = new Label(); Button szamitButton = new Button(); TextBox resBox = new TextBox(); Program01() { initComponent(); } public void initComponent() { rBox.Location = new Point(120, 10); hBox.Location = new Point(120, 40); rLabel.Location = new Point(10, 10); hLabel.Location = new Point(10, 40); resBox.Location = new Point(120, 80); szamitButton.Location = new Point(10, 80); rLabel.Text = "Sugár"; hLabel.Text = "Magasság"; szamitButton.Text = "Számít"; szamitButton.Click += new EventHandler(SzamitClick); rBox.TextChanged += new EventHandler(rTextChanged); hBox.TextChanged += new EventHandler(hTextChanged); this.Controls.Add(rBox); this.Controls.Add(hBox); this.Controls.Add(rLabel); this.Controls.Add(hLabel); this.Controls.Add(szamitButton); this.Controls.Add(resBox); this.Size = new Size(400, 300); this.Show(); } public void rTextChanged(object sender, EventArgs e) { if(!IsValid(rBox.Text)) { rBox.BackColor = Color.Red; }else { rBox.BackColor = Color.White; } } public void hTextChanged(object sender, EventArgs e) { if(!IsValid(hBox.Text)) { hBox.BackColor = Color.Red; }else { hBox.BackColor = Color.White; } } public bool IsValid(string value) { return Regex.IsMatch(value, @"^[0-9]*$"); } public void SzamitClick(object sender, EventArgs e) { string sugarStr = rBox.Text; string magassagStr = hBox.Text; double sugar = Convert.ToDouble(sugarStr); double magassag = Convert.ToDouble(magassagStr); double terfogat = (1.0/3.0) * Math.Pow(sugar, 2) * Math.PI * magassag; resBox.Text = terfogat.ToString(); } public static void Main() { Application.Run(new Program01()); } } ===== Legördülő listadoboz ===== using System; using System.Drawing; using System.Windows.Forms; public class Form1: Form { ComboBox kombo = new ComboBox(); public Form1() { this.Text = "Legördülő listadoboz"; this.StartPosition = FormStartPosition.CenterScreen; kombo.Text = "Valami"; kombo.Items.Add("Egyik"); kombo.Items.Add("Másik"); Controls.Add(kombo); } static public void Main() { Application.Run(new Form1()); } } ==== Esemény ==== using System; using System.Drawing; using System.Windows.Forms; class Program01 : Form { ComboBox kombo = new ComboBox(); Program01() { kombo.Items.Add("Pali"); kombo.Items.Add("Kati"); kombo.Items.Add("Lali"); kombo.Items.Add("Lili"); kombo.Items.Add("Dani"); kombo.Items.Add("Viki"); kombo.Items.Add("Benci"); kombo.Items.Add("Niki"); kombo.SelectedIndexChanged += OnIndexChanges; this.Controls.Add(kombo); this.Size = new Size(400, 300); this.Show(); } public void OnIndexChanges(object sender, EventArgs e) { this.Text = "más"; } public static void Main() { Application.Run(new Program01()); } } ===== Programikon ===== using System; using System.Drawing; using System.Windows.Forms; public class Form1 : Form { public Form1() { this.Icon = new Icon("filenev.ico"); } static public void Main() { Application.Run(new Form1()); } } A filenev.ico nevű állományt másoljuk a prog.cs állománnyal egy könyvtárba. ===== Megnyitás párbeszédablak ===== Az első minta program csak egy egyszerű megnyitás párbeszédablakot nyit meg. using System; using System.Windows.Forms; class Program { public static void Main() { OpenFileDialog megnyitas = new OpenFileDialog(); if(megnyitas.ShowDialog() == DialogResult.OK) { Console.WriteLine("Megnyitás megtörtént"); Console.WriteLine(megnyitas.FileName); // Ide jön amit még szeretnénk tenni megnyitás után } } } A következő minta programban már a párbeszéd program néhány tulajdonságát is állítgatjuk. Ezek a beállítások nem kötelezőek. using System; using System.Windows.Forms; class Program { public static void Main() { OpenFileDialog megnyitas = new OpenFileDialog(); megnyitas.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; megnyitas.FilterIndex =2; megnyitas.Title = "Egy fájl betöltese"; megnyitas.InitialDirectory = @"C:\Windows"; if(megnyitas.ShowDialog() == DialogResult.OK) { Console.WriteLine("Megnyitás megtörtént"); Console.WriteLine(megnyitas.FileName); } } } ===== Mentés párbeszédablak ===== A következő példaprogram egy mentés párbeszédablakot nyit meg. using System; using System.Windows.Forms; class Program { public static void Main() { SaveFileDialog Mentes = new SaveFileDialog(); if(Mentes.ShowDialog() == DialogResult.OK) { Console.WriteLine("Helló Világ!"); Console.WriteLine(Mentes.FileName); } } } A következő példában a mentés párbeszédablaknak néhány tulajdonságát is beállítjuk. using System; using System.Windows.Forms; class Program { public static void Main() { SaveFileDialog Mentes = new SaveFileDialog(); Mentes.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; Mentes.FilterIndex = 2; if(Mentes.ShowDialog() == DialogResult.OK) Console.WriteLine("Helló Világ!"); } } A megnyitás és mentés párbeszédablakot a végén meg is szüntethetjük, a memóriából törölhetjük: DialogSave.Dispose(); DialogSave = null; ===== Üzenetablak ===== using System; using System.Windows.Forms; class Program { public static void Main() { MessageBox.Show("Üzenet"); } } A szülőablakot is megadhatjuk: MessageBox.Show(this, "Üzenet"); Ennek az az előnye, hogy a párbeszédablak ehhez fog igazodni. ===== Listadoboz ===== ==== ListBox ==== using System; using System.Drawing; using System.Windows.Forms; public class Form1 : Form { Button b = new Button(); ListBox listadoboz = new ListBox(); public Form1() { b.Text = "Kattints ide"; b.Click += new EventHandler(Button_Click); b.Location = new Point(112,20); listadoboz.Location = new Point(50,80); listadoboz.Size = new Size(200, 100); listadoboz.MultiColumn = false; //Többoszlopos listadoboz.SelectionMode = SelectionMode.MultiExtended; //Ez kell, hogy több elemet is ki lehessen jelölni. //Elem felvétele: listadoboz.Items.Add("Első"); listadoboz.Items.Add("Második"); listadoboz.Items.Add("Harmadik"); listadoboz.Items.Add("Negyedik"); // Több elem kijelölése: listadoboz.SetSelected(1, true); listadoboz.SetSelected(3, true); Controls.Add(b); Controls.Add(listadoboz); } static public void Main() { Application.Run(new Form1()); } private void Button_Click(object sender, EventArgs e) { MessageBox.Show(listadoboz.SelectedItems[0].ToString()); } } Ha több listBox.Items.Add() metódust futtatunk, akkor nem szeretnénk azonnal frissíteni a listadobozt, csak ha az összest hozzáadtuk: // A listadoboz rajzolásának lekapcsolása új elem felvételénél listBox1.BeginUpdate(); // 50 elem felvétele egy ciklusban for (int x = 1; x <= 50; x++) { listBox1.Items.Add("Item " + x.ToString()); } // Az listadoboz újrarajzolásának engedélyezése listBox1.EndUpdate(); ==== Lista elemei ==== Lista elemeinek lekérése: cimke1.Text = lista.Items[0].ToString(); cimke2.Text = lista.Items[1].ToString(); Ciklusban a lista elemei: foreach (string s in lista.Items) { MessageBox.Show(s); } ==== Lista elem törlése ==== A kiválasztott elem törlése: listbox1.Items.Remove(listbox1.SelectedItem); Ha több kiválasztott van, az első törlése: listbox1.Items.Remove(listbox1.SelectedItems[0]); ==== Lista elem beszúrása ==== listbox1.Items.Insert(index, item); ===== Font ===== ==== A Font osztály használata ==== A fontok beállítását a Font osztállyal valósíthatjuk meg. A Font osztály a System.Drawing névtérben található. using System.Windows.Forms; using System.Drawing; class Program : Form { Label cimke1; Font font1; Program() { Width = 800; Height = 600; Show(); cimke1 = new Label(); font1 = new Font("Liberation Serif", 28, FontStyle.Regular); cimke1.Top = 100; cimke1.Left = 100; cimke1.Text = "Teszt"; cimke1.Font = font1; cimke1.Height = 50; Controls.Add(cimke1); } static void Main() { Application.Run(new Program()); } } A font1 objektumot persze nem kötelező létrehozni. A konstruktort használhatjuk a Label.Font = jobb oldalán is: using System.Windows.Forms; using System.Drawing; class Program : Form { Label cimke1; Program() { Width = 800; Height = 600; Show(); cimke1 = new Label(); cimke1.Top = 100; cimke1.Left = 100; cimke1.Text = "Teszt"; cimke1.Font = new Font("Liberation Serif", 28, FontStyle.Regular); cimke1.Height = 50; Controls.Add(cimke1); } static void Main() { Application.Run(new Program()); } } ==== Font Stílusok ==== A harmadik paraméter a font stílusa. Ezek az alábbi felsorolt típus egyik tagjának értékét vehetik fel: ^ Tag ^ Leírás ^ | Regular | Normál szöveg | | Bold | Félkövér | | Italic | Dőlt | | Underline | Aláhúzott | | Strikeout | Áthúzott | ==== Több font stílus ==== A fontstílusból több is megadható a "|" karakterrel tagolva: cimke1.Font = new Font("Liberation Serif", 28, FontStyle.Bold | FontStyle.Italic); Ha meglévő beállításokhoz mellet csak a stílust szeretném átállítani: cimke1.Font = new Font(cimke1.Font, FontStyle.Bold); ==== Font stílus saját metódussal ==== using System.Windows.Forms; using System.Drawing; class Program : Form { Label cimke1; Program() { Width = 800; Height = 600; Show(); cimke1 = new Label(); cimke1.Top = 100; cimke1.Left = 100; cimke1.Text = "Teszt"; cimke1.Font = beallitBoldFont(cimke1.Font); cimke1.Height = 50; Controls.Add(cimke1); } static public Font beallitBoldFont(Font font) { if(font != null) { FontStyle fontStilus = font.Style; if((fontStilus & FontStyle.Bold) == 0) { fontStilus |= FontStyle.Bold; font = new Font(font, fontStilus); } } return font; } static void Main() { Application.Run(new Program()); } } ===== Színezés ===== ==== Egyszerű szövegszínezés ==== using System.Windows.Forms; using System.Drawing; class Program : Form { Label cimke1; Program() { Width = 800; Height = 600; Show(); cimke1 = new Label(); cimke1.Top = 100; cimke1.Left = 100; cimke1.Text = "Teszt"; cimke1.Font = new Font("Liberation Serif", 28); cimke1.ForeColor = Color.Red; cimke1.Height = 50; Controls.Add(cimke1); } static void Main() { Application.Run(new Program()); } } ^ Színkód ^ ARGB érték ^ | AliceBlue | #FFF0F8FF | | AntiqueWhite | #FFFAEBD7 | | Aqua | #FF00FFFF | | Aquamarine | #FF7FFFD4 | | Azure | #FFF0FFFF | | Beige | #FFF5F5DC | | Bisque | #FFFFE4C4 | | Black | #FF000000 | | BlanchedAlmond | #FFFFEBCD | | Blue | #FF0000FF | | BlueViolet | #FF8A2BE2 | | Brown | #FFA52A2A | | BurlyWood | #FFDEB887 | | CadetBlue | #FF5F9EA0 | | Chartreuse | #FF7FFF00 | | Chocolate | #FFD2691E | | Coral | #FFFF7F50 | | CornflowerBlue | #FF6495ED | | Cornsilk | #FFFFF8DC | | Crimson | #FFDC143C | | Cyan | #FF00FFFF | | DarkBlue | #FF00008B | | DarkCyan | #FF008B8B | | DarkGoldenrod | #FFB8860B | | DarkGray | #FFA9A9A9 | | DarkGreen | #FF006400 | | DarkKhaki | #FFBDB76B | | DarkMagenta | #FF8B008B | | DarkOliveGreen | #FF556B2F | | DarkOrange | #FFFF8C00 | | DarkOrchid | #FF9932CC | | DarkRed | #FF8B0000 | | DarkSalmon | #FFE9967A | | DarkSeaGreen | #FF8FBC8F | | DarkSlateBlue | #FF483D8B | | DarkSlateGray | #FF2F4F4F | | DarkTurquoise | #FF00CED1 | | DarkViolet | #FF9400D3 | | DeepPink | #FFFF1493 | | DeepSkyBlue | #FF00BFFF | | DimGray | #FF696969 | | DodgerBlue | #FF1E90FF | | Firebrick | #FFB22222 | | FloralWhite | #FFFFFAF0 | | ForestGreen | #FF228B22 | | Fuchsia | #FFFF00FF | | Gainsboro | #FFDCDCDC | | GhostWhite | #FFF8F8FF | | Gold | #FFFFD700 | | Goldenrod | #FFDAA520 | | Gray | #FF808080 | | Green | #FF008000 | | GreenYellow | #FFADFF2F | | Honeydew | #FFF0FFF0 | | HotPink | #FFFF69B4 | | IndianRed | #FFCD5C5C | | Indigo | #FF4B0082 | | Ivory | #FFFFFFF0 | | Khaki | #FFF0E68C | | Lavender | #FFE6E6FA | | LavenderBlush | #FFFFF0F5 | | LawnGreen | #FF7CFC00 | | LemonChiffon | #FFFFFACD | | LightBlue | #FFADD8E6 | | LightCoral | #FFF08080 | | LightCyan | #FFE0FFFF | | LightGoldenrodYellow | #FFFAFAD2 | | LightGray | #FFD3D3D3 | | LightGreen | #FF90EE90 | | LightPink | #FFFFB6C1 | | LightSalmon | #FFFFA07A | | LightSeaGreen | #FF20B2AA | | LightSkyBlue | #FF87CEFA | | LightSlateGray | #FF778899 | | LightSteelBlue | #FFB0C4DE | | LightYellow | #FFFFFFE0 | | Lime | #FF00FF00 | | LimeGreen | #FF32CD32 | | Linen | #FFFAF0E6 | | Magenta | #FFFF00FF | | Maroon | #FF800000 | | MediumAquamarine | #FF66CDAA | | MediumBlue | #FF0000CD | | MediumOrchid | #FFBA55D3 | | MediumPurple | #FF9370DB | | MediumSeaGreen | #FF3CB371 | | MediumSlateBlue | #FF7B68EE | | MediumSpringGreen | #FF00FA9A | | MediumTurquoise | #FF48D1CC | | MediumVioletRed | #FFC71585 | | MidnightBlue | #FF191970 | | MintCream | #FFF5FFFA | | MistyRose | #FFFFE4E1 | | Moccasin | #FFFFE4B5 | | NavajoWhite | #FFFFDEAD | | Navy | #FF000080 | | OldLace | #FFFDF5E6 | | Olive | #FF808000 | | OliveDrab | #FF6B8E23 | | Orange | #FFFFA500 | | OrangeRed | #FFFF4500 | | Orchid | #FFDA70D6 | | PaleGoldenrod | #FFEEE8AA | | PaleGreen | #FF98FB98 | | PaleTurquoise | #FFAFEEEE | | PaleVioletRed | #FFDB7093 | | PapayaWhip | #FFFFEFD5 | | PeachPuff | #FFFFDAB9 | | Peru | #FFCD853F | | Pink | #FFFFC0CB | | Plum | #FFDDA0DD | | PowderBlue | #FFB0E0E6 | | Purple | #FF800080 | | Red | #FFFF0000 | | RosyBrown | #FFBC8F8F | | RoyalBlue | #FF4169E1 | | SaddleBrown | #FF8B4513 | | Salmon | #FFFA8072 | | SandyBrown | #FFF4A460 | | SeaGreen | #FF2E8B57 | | SeaShell | #FFFFF5EE | | Sienna | #FFA0522D | | Silver | #FFC0C0C0 | | SkyBlue | #FF87CEEB | | SlateBlue | #FF6A5ACD | | SlateGray | #FF708090 | | Snow | #FFFFFAFA | | SpringGreen | #FF00FF7F | | SteelBlue | #FF4682B4 | | Tan | #FFD2B48C | | Teal | #FF008080 | | Thistle | #FFD8BFD8 | | Tomato | #FFFF6347 | | Turquoise | #FF40E0D0 | | Violet | #FFEE82EE | | Wheat | #FFF5DEB3 | | White | #FFFFFFFF | | WhiteSmoke | #FFF5F5F5 | | Yellow | #FFFFFF00 | | YellowGreen | #FF9ACD32 | ==== Saját szín ==== Magam is létrehozhatok RGB kóddal színeket: BackColor = Color.FromArgb(255, 0, 0); De lehet így is: Color sajatSzin = new Color(); sajatSzin = Color.FromArgb(255, 0, 0); BackColor = sajatSzin; A példában azt látjuk, létrehozható olyan szín objektum is, amelyet többször is használhatunk. ===== Kép beillesztése ===== ==== Háttérkép ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { Program() { BackgroundImage = Image.FromFile("kep.png"); Width = 800; Height = 600; } public static void Main() { Application.Run(new Program()); } } Az ablak méretét a képhez igazítjuk: using System; using System.Drawing; using System.Windows.Forms; class Program : Form { Program() { BackgroundImage = Image.FromFile("kep.png"); Size kepmeret = new Size(); kepmeret.Width = BackgroundImage.Width; kepmeret.Height = BackgroundImage.Height; ClientSize = kepmeret; } public static void Main() { Application.Run(new Program()); } } ===== Eszköztár ===== ToolBar using System; using System.Drawing; using System.Windows.Forms; class Program : Form { ToolBar Eszkoztar; ToolBarButton MegnyitasGomb; ToolBarButton BezarGomb; ToolBarButton KilepGomb; TextBox Szerkeszto; ImageList keplista; Program() { Width=800; Height=600; Eszkoztar = new ToolBar(); MegnyitasGomb = new ToolBarButton(); BezarGomb = new ToolBarButton(); KilepGomb = new ToolBarButton(); Szerkeszto = new TextBox(); keplista = new ImageList(); keplista.ImageSize = new Size(32, 32); keplista.TransparentColor = Color.White; keplista.Images.Add(Image.FromFile("megnyitas.png")); keplista.Images.Add(Image.FromFile("bezar.png")); keplista.Images.Add(Image.FromFile("kilepes.png")); Eszkoztar.Buttons.Add(MegnyitasGomb); Eszkoztar.Buttons.Add(BezarGomb); Eszkoztar.Buttons.Add(KilepGomb); Eszkoztar.ImageList = keplista; Eszkoztar.ButtonClick += new ToolBarButtonClickEventHandler(ToolBar_Click); MegnyitasGomb.ImageIndex = 0; MegnyitasGomb.ToolTipText = "Megnyitás"; BezarGomb.ImageIndex = 1; BezarGomb.ToolTipText = "Bezárás"; KilepGomb.ImageIndex = 2; KilepGomb.ToolTipText = "Kilépés"; Szerkeszto.Multiline = true; Szerkeszto.Dock = DockStyle.Fill; Controls.Add(Szerkeszto); Controls.Add(Eszkoztar); } private void ToolBar_Click(object sender, ToolBarButtonClickEventArgs e) { switch(Eszkoztar.Buttons.IndexOf(e.Button)) { case 0 : MessageBox.Show("Megnyitás árnyékeljárás"); break; case 1 : MessageBox.Show("Bezárás árnyékeljárás"); break; case 2 : Application.Exit(); break; } } static void Main() { Application.Run(new Program()); } } Az eszköztárgomb stílusának beállítására példa: EszkoztarGomb.Style = ToolBarButtonStyle.DropDownButton; ToolBarButtonStyle felsorolt típus értékei: | DropDownButton | Egy menü vagy másik ablak megjelenítésére | | PushButton | Alapértelmezett, háromdimenziós gomb | | Separator | Egy vonal vagy hely a két gomb között | | ToggleButton | Lenyomva maradhat | Ha valamit DropDown típusúnak állítottunk be: MenuItem menuItem1 = new MenuItem("Nyomtat"); ContextMenu contextMenu1 = new ContextMenu(new MenuItem[]{menuItem1}); EszkoztarGomb.Style = ToolBarButtonStyle.DropDownButton; EszkoztarGomb.DropDownMenu = contextMenu1; ===== Állapotsor ===== Az állapotsor, angolosan státuszbár, angolul StatusBar. Általában az ablak alján elhelyezett komponens, amely az ablakon lévő komponensekről ad információt. A C# nyelvben létre kell hozni egy StatusBar objektumot. Ezen önmagában is állítható a Text tulajdonság, de felhelyezhetünk a státusz sorra önálló paneleket a StatusBarPanel osztály segítségével: using System; using System.Drawing; using System.Windows.Forms; class Program : Form { StatusBar allapotsav; StatusBarPanel egy; StatusBarPanel ketto; Program() { allapotsav = new StatusBar(); egy = new StatusBarPanel(); ketto = new StatusBarPanel(); egy.BorderStyle = StatusBarPanelBorderStyle.Sunken; egy.AutoSize = StatusBarPanelAutoSize.Spring; egy.Text = "Egy"; egy.ToolTipText = "Első"; ketto.BorderStyle = StatusBarPanelBorderStyle.Raised; //~ ketto.AutoSize = StatusBarPanelAutoSize.Spring; ketto.Text = "Kettő"; ketto.ToolTipText = "Második"; allapotsav.Panels.Add(egy); allapotsav.Panels.Add(ketto); allapotsav.ShowPanels = true; Controls.Add(allapotsav); Width=800; Height=600; } static void Main() { Application.Run(new Program()); } } A program indulásakor beállíthatjuk a státuszsor értékeit például Load esemény hatására: this.Load += new System.EventHandler(this.StatusBar_Load); ===== Helyi menü ===== A ContextMenu, azaz helyi menü egy jobb egérgombra előugró menü, bármely komponensen. A System.Windows.Forms névtérből használjuk a ContextMenu osztályt. A menüpontokat a főmenühöz hasonlóan a MenuItems osztállyal hozzuk létre. Az ablaknak (Form) van egy ContextMenu tulajdonsága, a helyi menüt ennek adjuk át. using System; using System.Drawing; using System.Windows.Forms; class Program : Form { ContextMenu tmenu; Program() { tmenu = new ContextMenu(); tmenu.MenuItems.Add(new MenuItem("&Egy")); tmenu.MenuItems.Add(new MenuItem("&Kettő")); ContextMenu = tmenu; Width=600; Height=480; CenterToScreen(); } static void Main() { Application.Run(new Program()); } } A fenti példában az ablak bármely részén jobb egérgombra kattintva megjelenik a menü. Eseménykezeléssel: using System; using System.Drawing; using System.Windows.Forms; class Program : Form { ContextMenu tmenu; MenuItem elsoMenupont; MenuItem masodikMenupont; Program() { elsoMenupont = new MenuItem("&Első"); masodikMenupont = new MenuItem("&Második"); elsoMenupont.Click += new EventHandler(elsoMenupont_Click); masodikMenupont.Click += new EventHandler(masodikMenupont_Click); tmenu = new ContextMenu(); tmenu.MenuItems.Add(elsoMenupont); tmenu.MenuItems.Add(masodikMenupont); ContextMenu = tmenu; Width=600; Height=480; CenterToScreen(); } private void elsoMenupont_Click(object sender, EventArgs e) { MessageBox.Show("Első árnyékeljárás"); } private void masodikMenupont_Click(object sender, EventArgs e) { MessageBox.Show("Második árnyékeljárás"); } static void Main() { Application.Run(new Program()); } } A fenti példákban a tartalommenüt az ablakhoz kötöttük a következő sorral: ContextMenu = tmenu; A tartalommenü azonban köthető bármely komponenshez. A következő példában egy TextBox típusú komponenshez kötöm: textbox1.ContextMenu = tmenu; ===== Vágólap használat ===== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { ContextMenu cmenu; MenuItem copymenuitem; MenuItem pastemenuitem; MenuItem cutmenuitem; MenuItem selectallmenuitem; TextBox edittextbox; Program() { cmenu = new ContextMenu(); copymenuitem = new MenuItem(); pastemenuitem = new MenuItem(); cutmenuitem = new MenuItem(); selectallmenuitem = new MenuItem(); edittextbox = new TextBox(); copymenuitem.Text = "Másolás"; copymenuitem.Click += new EventHandler(Copy_Click); pastemenuitem.Text = "Beillesztés"; pastemenuitem.Click += new EventHandler(Paste_Click); cutmenuitem.Text = "Kivágás"; cutmenuitem.Click += new EventHandler(Cut_Click); selectallmenuitem.Text = "Az összes kijelölése"; selectallmenuitem.Click += new EventHandler(Selectall_Click); cmenu.MenuItems.Add(copymenuitem); cmenu.MenuItems.Add(pastemenuitem); cmenu.MenuItems.Add(cutmenuitem); cmenu.MenuItems.Add(selectallmenuitem); edittextbox.Multiline = true; edittextbox.Size = new Size(300, 300); edittextbox.Location = new Point(200,100); edittextbox.ContextMenu = cmenu; Controls.Add(edittextbox); Width=800; Height=600; } private void Copy_Click(object sender, EventArgs e) { Clipboard.SetText(edittextbox.SelectedText); } private void Paste_Click(object sender, EventArgs e) { edittextbox.Paste(Clipboard.GetText()); } private void Cut_Click(object sender, EventArgs e) { edittextbox.Cut(); } private void Selectall_Click(object sender, EventArgs e) { edittextbox.SelectAll(); } [STAThread] static void Main() { Application.Run(new Program()); } } A programunk sok szempontból nem tökéletes. Például ha a vágólap üres vagy éppen kép van rajta. ===== Billentyűk figyelése ===== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { TextBox edit; Program() { edit = new TextBox(); edit.KeyDown += new KeyEventHandler(Bil); Controls.Add(edit); Width = 800; Height = 600; CenterToScreen(); } private void Bil(object sender, KeyEventArgs e) { // ha Alt + E lett lenyomva if (e.Alt && e.KeyCode == Keys.E) MessageBox.Show("Lenyomva Alt + E"); if (e.KeyCode == Keys.Enter) MessageBox.Show("Lenyomva Enter"); if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9) MessageBox.Show("Számokon kívül bármi"); if(e.KeyCode == Keys.NumPad0) MessageBox.Show("0 számbillentyű"); if(e.KeyCode == Keys.Escape) MessageBox.Show("Lenyomva: Escape"); } public static void Main() { Application.Run(new Program()); } } Az ablak események figyeléséhez felül kell írni a következő metódust: protected override bool ProcessDialogKey(Keys keyData) { switch (keyData) { case Keys.Left: MessageBox.Show("bal"); return true; } return base.ProcessDialogKey(keyData); } Ez akkor is működik, ha van valamilyen kontroll az ablakon, és fókuszba került. A Ctrl + Alt + o elkapása: if (e.Control && e.Alt && e.KeyCode == Keys.O) { MessageBox.Show("Ctrl+Alt+O: elkapva"); } ===== Hasznos tulajdonságok lekérdezése ===== A program melyik könyvtárból indul. Application.StartupPath; A kliens szélessége, magasság (belő terület): int belsoszelesseg = ClientSize.Width; int belsomagassag = ClientSize.Height; ===== Tömbök használata komponensekhez ===== Meg kell mondanunk a tömb hány elemből fog állni, de utána minden tömbelemnek (komponensnek) külön helyet kell foglalnunk: using System; using System.Drawing; using System.Windows.Forms; class Program : Form { Button[] gomb; Program() { gomb = new Button[10]; for(int i=0; i<10; i++) gomb[i] = new Button(); for(int i=0; i<10; i++) gomb[i].Location = new Point(100, i * 30 + 100); for(int i=0; i<10; i++) gomb[i].Text = Convert.ToString(i); for(int i=0; i<10; i++) Controls.Add(gomb[i]); Width = 800; Height = 600; } public static void Main() { Application.Run(new Program()); } } A helyfoglalás. gomb = new Button[10]; for(int i=0; i<10; i++) gomb[i] = new Button(); A helyfoglalás után bármely elemet használhatjuk. ===== Füles ablakok ===== Tabbed using System; using System.Drawing; using System.Windows.Forms; class Program : Form { TabControl tabalap; TabPage tab1; TabPage tab2; Button gomb1; Program() { tabalap = new TabControl(); tab1 = new TabPage(); tab2 = new TabPage(); gomb1 = new Button(); gomb1.Text = "Nyomj meg"; gomb1.Location = new Point(100, 100); tab1.SuspendLayout(); tabalap.Controls.Add(tab1); tabalap.Controls.Add(tab2); tabalap.Dock = DockStyle.Fill; tab1.Text = "Első"; tab1.Controls.Add(gomb1); tab2.Text = "Második"; Controls.Add(tabalap); Width = 800; Height = 600; } public static void Main() { Application.Run(new Program()); } } Egy tabot aktívvá tehetünk a SelectTab() metódussal. A bemenőparaméter vagy a tab száma, vagy felirata, vagy az objektum neve: tabcontrol1.SelectTab(Int32) tabcontrol1.SelectTab(String) tabcontrol1.SelectTab(TabPage) Törölhetünk egy tabot a tabalapról a nevével vagy idexével: tabcontrol1.Remove(TabPage) tabcontrol1.RemoveAt(0) ===== Folyamatsáv ===== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { ProgressBar progressbar1; Button button1; Program() { progressbar1 = new ProgressBar(); button1 = new Button(); progressbar1.Location = new Point(100,200); progressbar1.Size = new Size(500, 40); progressbar1.Minimum = 0; progressbar1.Maximum = 10; progressbar1.Step = 1; //~ progressbar1.Style = ProgressBarStyle.Continuous; progressbar1.Style = ProgressBarStyle.Blocks; //~ progressbar1.Style = ProgressBarStyle.Marquee; button1.Text = "Emel"; button1.Location = new Point( 200, 300); button1.Click += new EventHandler(Button1_Click); Controls.Add(progressbar1); Controls.Add(button1); Width = 800; Height = 600; } private void Button1_Click(object sender, EventArgs e) { if (progressbar1.Value<10) //~ progressbar1.Value++; progressbar1.Increment(1); } public static void Main() { Application.Run(new Program()); } } Ha folyamatosan animált folyamatsávot szeretnénk, akkor stílusnak a ProgressBarStyle.Marquee beállítás szükséges: progressbar1.Style = ProgressBarStyle.Marquee; Beállítható az animáció sebessége: progressbar1.MarqueeAnimationSpeed = 30; A 30-as érték megfelelő eredményt szokott adni. Megjegyzés: Mono 2.x alatt eredménye nem látható ===== Rádiógomb ===== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { RadioButton radiogomb1; RadioButton radiogomb2; RadioButton radiogomb3; Button gomb1; Panel panel1; Program() { radiogomb1 = new RadioButton(); radiogomb2 = new RadioButton(); radiogomb3 = new RadioButton(); gomb1 = new Button(); panel1 = new Panel(); gomb1.Text = "Ellenőrzés"; gomb1.Location = new Point(200, 400); gomb1.Click += new EventHandler(Gomb1_Click); radiogomb1.Text = "Első"; radiogomb1.Location = new Point(2, 2); radiogomb2.Text = "Második"; radiogomb2.Location = new Point(2, 20); radiogomb3.Text = "Második"; radiogomb3.Location = new Point(2, 38); panel1.BackColor = Color.White; panel1.Controls.Add(radiogomb1); panel1.Controls.Add(radiogomb2); panel1.Controls.Add(radiogomb3); panel1.Location = new Point(200, 200); Controls.Add(panel1); Controls.Add(gomb1); Width = 800; Height = 600; } private void Gomb1_Click(object sender, EventArgs e) { if (radiogomb1.Checked) MessageBox.Show("1 beállítva"); else if(radiogomb2.Checked) MessageBox.Show("2 beállítva"); else MessageBox.Show("3 beállítva"); } public static void Main() { Application.Run(new Program()); } } ===== Ellenőrzőnégyzet ===== ==== Jelölőnégyzet megjelenítése ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { CheckBox checkbox1; Program() { checkbox1 = new CheckBox(); checkbox1.Location = new Point(100, 100); checkbox1.Text = "Jelölő négyzet"; Controls.Add(checkbox1); } static void Main() { Application.Run(new Program()); } } ==== Használat ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { CheckBox jelolonegyzet1; CheckBox jelolonegyzet2; Button gomb1; Program() { jelolonegyzet1 = new CheckBox(); jelolonegyzet2 = new CheckBox(); gomb1 = new Button(); jelolonegyzet1.Text = "Első"; jelolonegyzet1.Location = new Point(200, 200); jelolonegyzet2.Text = "Második"; jelolonegyzet2.Location = new Point(200, 240); gomb1.Text = "Ellenőrzés"; gomb1.Location = new Point(200, 300); gomb1.Click += new EventHandler(Gomb1_Click); Controls.Add(jelolonegyzet1); Controls.Add(jelolonegyzet2); Controls.Add(gomb1); Width = 800; Height = 600; } private void Gomb1_Click(object sender, EventArgs e) { if(jelolonegyzet1.Checked && !jelolonegyzet2.Checked) MessageBox.Show("Első bejelölve"); else if(!jelolonegyzet1.Checked && jelolonegyzet2.Checked) MessageBox.Show("Kettes bejelölve"); else if(jelolonegyzet1.Checked && jelolonegyzet2.Checked) MessageBox.Show("Mind a kettő bejelölve"); else MessageBox.Show("Egyik sincs bejelölve"); } public static void Main() { Application.Run(new Program()); } } A példában a jelölőnégyzet objektum Checked tulajdonságát vizsgáljuk, ami true vagy false lehet. ==== A CheckedChanged esemény figyelése ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { CheckBox checkbox1; Program() { checkbox1 = new CheckBox(); checkbox1.Location = new Point(100, 100); checkbox1.Text = "Jelölő négyzet"; checkbox1.CheckedChanged += new EventHandler(Checkbox1_CheckedChanged); Controls.Add(checkbox1); } private void Checkbox1_CheckedChanged(object sender, EventArgs e) { if(checkbox1.Checked == true) Text = "Beállítva"; else Text = "Nincs beállítva"; } static void Main() { Application.Run(new Program()); } } ===== Csoportdoboz ===== ==== Egyszerű csoportdoboz ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { GroupBox groupbox1; Program() { groupbox1 = new GroupBox(); groupbox1.Bounds = new Rectangle(50, 50, 130, 100); groupbox1.Text = "Felirat"; Controls.Add(groupbox1); } static void Main() { Application.Run(new Program()); } } ==== Komponensek felfűzése ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { GroupBox groupbox1; Label label1; Button button1; Program() { groupbox1 = new GroupBox(); label1 = new Label(); button1 = new Button(); label1.Text = "Címke"; label1.Location = new Point(40, 20); button1.Text = "Nyomj meg"; button1.Location = new Point(40, 50); groupbox1.Bounds = new Rectangle(30, 30, 170, 130); groupbox1.Text = "Felirat"; groupbox1.Controls.Add(label1); groupbox1.Controls.Add(button1); Controls.Add(groupbox1); } static void Main() { Application.Run(new Program()); } } ==== Csoport doboz rádiógombokkal ==== using System; using System.Drawing; using System.Windows.Forms; class Program : Form { GroupBox groupbox1; RadioButton radiobutton1; RadioButton radiobutton2; RadioButton radiobutton3; Button button1; Program() { groupbox1 = new GroupBox(); radiobutton1 = new RadioButton(); radiobutton2 = new RadioButton(); radiobutton3 = new RadioButton(); button1 = new Button(); button1.Text = "Nyomj meg"; button1.Location = new Point(60, 190); button1.Click += new EventHandler(Button1_Click); radiobutton1.Location = new Point(20, 30); radiobutton1.Text = "Rádiógomb1"; radiobutton2.Location = new Point(20, 60); radiobutton2.Text = "Rádiógomb2"; radiobutton3.Location = new Point(20, 90); radiobutton3.Text = "Rádiógomb3"; groupbox1.Bounds = new Rectangle(30, 30, 190, 140); groupbox1.Text = "Felirat"; groupbox1.Controls.Add(radiobutton1); groupbox1.Controls.Add(radiobutton2); groupbox1.Controls.Add(radiobutton3); Controls.Add(button1); Controls.Add(groupbox1); } private void Button1_Click(object sender, EventArgs e) { if(radiobutton1.Checked) Text = "Első"; else if(radiobutton2.Checked) Text = "Második"; else if(radiobutton3.Checked) Text = "Harmadik"; } static void Main() { Application.Run(new Program()); } } ===== Táblázat ===== ==== Egyszerű DataGridView ==== /* Mentés: tablazat.cs */ using System; using System.Drawing; using System.Windows.Forms; class Program : Form { DataGridView tabla; Program() { tabla = new DataGridView(); tabla.ColumnCount = 8; tabla.RowCount = 8; tabla.Size = new Size(700, 400); for(int i=0; i<8; i++) tabla.Columns[i].Width = 50; tabla.Rows[0].Cells[0].Value = 78; tabla.Rows[0].Cells[1].Value = 90; Controls.Add(tabla); Width=800; Height=600; } static void Main() { Application.Run(new Program()); } } ==== Táblázat tulajdonságok ==== using System; using System.Drawing; using System.Windows.Forms; public class Form1 : Form { DataGridView tabla = new DataGridView(); Button gomb = new Button(); public Form1() { this.Size = new Size(800,600); gomb.Text = "Kattints ide"; gomb.Location = new Point(112, 50); gomb.Click += new EventHandler(Button_Click); tabla.Location = new Point(50,100); //Táblázat stílus állítása tabla.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy; tabla.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; //Táblázat tulajdonságok tabla.Name = "Valami"; tabla.RowHeadersVisible = false; tabla.Size = new Size(300, 250); tabla.ColumnCount = 9; tabla.RowCount = 9; tabla.Columns[0].Name = "Első"; tabla.Columns[1].Name = "Második"; //Táblázat egyik cellájának értékadás tabla.Rows[1].Cells[0].Value = "vmi"; Controls.Add(gomb); Controls.Add(tabla); } static public void Main() { Application.Run(new Form1()); } private void Button_Click(object sender, EventArgs e) { MessageBox.Show("Gomb lenyomva"); } } ==== Még több tulajdonság ==== using System; using System.Drawing; using System.Windows.Forms; public class Form1 : Form { DataGridView tabla = new DataGridView(); public Form1() { tabla.Location = new Point(50,100); tabla.Name = "Valami"; tabla.RowHeadersVisible = false; tabla.Size = new Size(700, 400); tabla.ColumnCount = 9; tabla.RowCount = 9; // A táblázatfeliratsor beállítsai tabla.ColumnHeadersDefaultCellStyle.BackColor = Color.Navy; tabla.ColumnHeadersDefaultCellStyle.ForeColor = Color.White; tabla.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 18.5F); // A táblázatfeliratok tabla.Columns[0].Name = "Név"; tabla.Columns[1].Name = "Település"; //A táblázat oszlop szélesség, és sor magasság tabla.Columns[1].Width = 200; tabla.Rows[1].Height = 50; //Egy cella értékének beállítása tabla.Rows[1].Cells[0].Value = "vmi"; //Egy cellához külön objektumot rendelünk: DataGridViewCell cella = tabla.Rows[1].Cells[0]; cella.Style.Font = new Font("Arial", 18.5F, GraphicsUnit.Pixel); //Egy oszlophoz külön objektumot rendelünk: DataGridViewColumn oszlop = tabla.Columns[0]; oszlop.Width = 100; Controls.Add(tabla); this.Size = new Size(800,600); } static public void Main() { Application.Run(new Form1()); } } ==== Cellák kiválasztása ==== dataGridView1.CurrentCell.Selected = false; dataGridView1.Rows[RowIndex].Cells[ColumnIndex].Selected = true; dataGridView1.CurrentCell = dataGridView1.SelectedCells[0]; ==== Szelekciós mód ==== Az egész sort kijelöli tabla.SelectionMode = DataGridViewSelectionMode.FullRowSelect; Ez az alapértelmezett: tabla.SelectionMode = DataGridViewSelectionMode.CellSelect; ==== Stílus ==== tabla.Rows[0].Cells[0].Style.Font = new Font("Arial", 8.5F); tabla.Rows[0].Cells[0].Style.Alignment = DataGridViewContentAlignment.TopLeft; ==== Átméretezések ==== Automatikus méretezés tabla.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; Ezzel a felhasználó nem tudja átméretezni az oszlopokat tabla.AllowUserToResizeColumns = false; Ezzel a felhasználó nem tudja átméretezni a sorokat tabla.AllowUserToResizeRows = false; ==== Nem bővíthető sorral rendelkező táblázat ==== Ha olyan táblázatot szeretnénk létrehozni, amelynek sorai nem bővíthetőek, akkor ügyeljünk arra, hogy a sorokat meghatározó RowCount tulajdonság a AllowUserToAddRows tulajdonság után legyen. Másként, mindig hiányozni fog egy sor, és nem tudjuk miért. tabla.AllowUserToAddRows = false; tabla.RowCount = 9; ===== Finomítás ===== ==== SuspendLayout() ==== A logikai elrendezés felfüggeszétse egy ResumeLayout() hívásig. Több komponens beállítása esetén meg szoktuk hívni. Kötelező újrarajzolás felfüggesztése ==== ResumeLayout() ==== A beállításokat aktualizálja ==== Példa ==== private void AddSomeControls() { this.SuspendLayout(); Button buttonOK = new Button(); buttonOK.Location = new Point(10, 10); buttonOK.Size = new Size(75, 25); buttonOK.Text = "OK"; Button buttonCancel = new Button(); buttonCancel.Location = new Point(90, 10); buttonCancel.Size = new Size(75, 25); buttonCancel.Text = "Cancel"; this.Controls.AddRange(new Control[]{buttonOK, buttonCancel}); this.ResumeLayout(); } ===== Több form ===== ==== Másik form komponensre ==== using System; using System.Drawing; using System.Windows.Forms; namespace Elso { public class Form1 : Form { Button mutatGomb = new Button(); Button valtoztatGomb = new Button(); Form2 form2 = new Form2(); public Form1() { mutatGomb.Text = "Mutat"; mutatGomb.Location = new Point(112, 50); valtoztatGomb.Text = "Változtatása"; valtoztatGomb.Location = new Point(112, 90); mutatGomb.Click += new EventHandler(Button_Click); valtoztatGomb.Click += new EventHandler(ValtoztatButton_Click); Controls.Add(mutatGomb); Controls.Add(valtoztatGomb); } static public void Main() { Application.Run(new Form1()); } private void Button_Click(object sender, EventArgs e) { form2.Show(); } private void ValtoztatButton_Click(object sender, EventArgs e) { form2.gomb.Text = "Új szöveg"; form2.textbox1.Text = "Én is változom"; } } public class Form2 : Form { public Button gomb = new Button(); public TextBox textbox1 = new TextBox(); public Form2() { gomb.Text = "Verseny"; gomb.Location = new Point(112, 50); textbox1.Location = new Point(112, 100); Controls.Add(gomb); Controls.Add(textbox1); } } } ==== Visszahivatkozás ==== A második ablakból visszahivatkozunk az elsőbe: using System; using System.Drawing; using System.Windows.Forms; using Masik; namespace Elso { public class Form1 : Form { Button gomb = new Button(); TextBox textbox1 = new TextBox(); public Form1() { gomb.Text = "Másik form megnyitása"; gomb.Location = new Point(112, 50); gomb.Click += new EventHandler(Button_Click); textbox1.Location = new Point(112, 150); Controls.Add(gomb); Controls.Add(textbox1); } public void setT(String s) { //Ezt a metódust majd a másik formból hívjuk textbox1.Text = s; } static public void Main() { Application.Run(new Form1()); } private void Button_Click(object sender, EventArgs e) { new Form2(this).Show(); } } } using System; using System.Drawing; using System.Windows.Forms; using Elso; namespace Masik { public class Form2 : Form { Form1 f1; //Az első osztályból lesz egy obj. Button gomb = new Button(); TextBox textbox1 = new TextBox(); public Form2(Form1 f) { //Az f-ben kapjuk a másik form mutatóját f1 = f; gomb.Text = "Verseny"; gomb.Location = new Point(112, 50); gomb.Click += new EventHandler(Button_Click); textbox1.Location = new Point(112, 100); Controls.Add(gomb); Controls.Add(textbox1); } private void Button_Click(object sender, EventArgs e) { if(textbox1.Text.Equals("")) MessageBox.Show("Üres a szövegdoboz"); else f1.setT(textbox1.Text); } } } Makefile Monohoz: all: gmcs /r:System.Windows.Forms,System.Drawing Program01.cs Masik.cs ==== Időzítő ==== using System; using System.Drawing; using System.Windows.Forms; class Program01 : Form { Timer timer = new Timer(); Program01() { timer.Tick += new EventHandler(Timer_Tick); timer.Interval = 1000 * 1; timer.Enabled = true; timer.Start(); this.Text = "0"; this.Size = new Size(400, 300); this.Show(); } public void Timer_Tick(object sender, EventArgs e) { string szamStr = this.Text; int szam = Convert.ToInt32(szamStr); szam++; szamStr = Convert.ToString(szam); this.Text = szamStr; } public static void Main() { Application.Run(new Program01()); } } ===== A Control osztály ===== ==== A Control osztályról általában ==== A .NET Framework 4 esetén a Control osztály olyan kolntrollok alaposztálya, amelyeknek van vizuális megjelenése. Öröklési hierachiában: * System.Object * System.MarshalByRefObject * System.ComponentModel.Component * System.Windows.Forms.Control A Button osztály például a hierachiában: * System.Object * System.MarshalByRefObject * System.ComponentModel.Component * System.Windows.Forms.Control * System.Windows.Forms.ButtonBase * System.Windows.Forms.Button Néhány tulajdonság: ==== Anchor ==== Az Anchor tulajdonság meghatározza, hogyan viselkedjen egy kontroll a tárólójának átméretezése esetén. Az anchor azt jelenti horgony. A beállítással megadhatjuk, melyik oldalhoz akarjuk horgonyozni az adott kontrollt. button1.Anchor = AnchorStyles.Top; Egyszerre két irány is meghatározható: button1.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right); Az AnchorStyles Enum típus lehetséges értékei: | Top | A konténer tetejéhez horgonyzás | | Bottom | A konténer aljához horgonyzás | | Left | A konténer bal oldalához horgonyzás | | Right | A konténer jobb oldalához horgonyzás | | None | Nincs horgony | ==== Dock ==== A Dock tulajdonsággal megadhatjuk, hogyan viselkedjen egy kontroll, az azt tartalmazó konténerhez. A Dock tulajdonság értéke DockStyle Enum értékeit veheti fel. | None | A kontroll nincs kötve. | | Top | A kontroll a konténer tetejéhez van kötve. | | Bottom | A kontroll a konténer aljához van kötve. | | Left | A kontroll a konténer bal oldalához van kötve. | | Right | A kontroll a konténer jobb oldalához van kötve. | | Fill | A kontroll a konténer minden oldalához kötve van. | button1.Dock = DockStyle.Left; button1.Dock = (DockStyle.Right | DockStyle.Top); ===== FlowLayoutPanel osztály ===== flp.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; flp.FlowDirection = FlowDirection.BottomUp; ^ Tag neve ^ Leírás ^ | LeftToRight | Az elemek követik egymást balról jobbra. | | TopDown | Az elemek fentről lefele követik egymást | | RightToLeft | Az elemek jobbról balra követik egymást | | BottomUp | Az elemek lentről felfele követik egymást | using System; using System.Drawing; using System.Windows.Forms; class Program01 : Form { FlowLayoutPanel flp = new FlowLayoutPanel(); Button button1 = new Button(); Button button2 = new Button(); Program01() { flp.FlowDirection = FlowDirection.LeftToRight; flp.WrapContents = false; flp.Dock = DockStyle.Fill; button1.Text = "Teszt"; button1.Anchor = AnchorStyles.Bottom; button2.Text = "Teszt2"; button2.Dock = DockStyle.Right; flp.Controls.Add(button1); flp.Controls.Add(button2); this.Controls.Add(flp); this.StartPosition = FormStartPosition.CenterScreen; } public static void Main() { Application.Run(new Program01()); } } ===== Sablon ===== Egy grafikus felület létrehozásához egy kezdősablon: using System; using System.Drawing; using System.Windows.Forms; class Program : Form { Program() { Width = 800; Height = 600; } static void Main() { Application.Run(new Program()); } } ===== Külső link ===== * http://msdn.microsoft.com/en-us/library/system.windows.forms%28v=VS.90%29.aspx * http://www.drdobbs.com/windows/windows-forms-layout-managers/184405892 * https://msdn.microsoft.com/en-us/library/ms951306.aspx