[[: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