Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:csharp:csharp_gui_windows.forms

Tartalomjegyzék

< 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 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());
	}
}
oktatas/programozas/csharp/csharp_gui_windows.forms.txt · Utolsó módosítás: 2022/05/13 21:38 szerkesztette: admin