Tartalomjegyzék
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 800×600-as ablakot jelenít meg.
WinForms
Egyablakos program létrehozása, egyetlen gombbal.
Forrás
- prog.cs
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:
- prog.cs
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
- Program.cs
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
- textbox.cs
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:
- program01.cs
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
- Program01.cs
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
- program01.cs
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
- Program01.cs
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.
- Program01.cs
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.
- Program01.cs
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.
- Program01.cs
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.
- Program01.cs
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
- Program01.cs
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
- Program01.cs
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ó.
- App.cs
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:
- App.cs
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
- Program01.cs
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:
- Program01.cs
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(); } } }
- Masik.cs
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:
- Makefile
all: gmcs /r:System.Windows.Forms,System.Drawing Program01.cs Masik.cs
Időzítő
- p01.cs
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 |
- Program01.cs
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:
- Program.cs
using System; using System.Drawing; using System.Windows.Forms; class Program : Form { Program() { Width = 800; Height = 600; } static void Main() { Application.Run(new Program()); } }