Kayıt
13 Temmuz 2009
Mesajlar
3.500
Beğeniler
0
Çok Kullanılan Kontroller (Common Controls)

System.Windows.Forms isimuzayı (namespace) windows tabanlı uygulamalar oluşturmamız için gerekli olan tüm sınıfları içermektedir. Bu yazıda, bahsi geçen sınıflardan Common Controls kategorisine girenler üzerinde duracağız. Bu kategoride TextBox, ComboBox, WebBrowser, Label vb. sınıflara göz atacağız.



Label Class: Label kontrolleri genellikle bir kontrol için tanımlayıcı bilgi sağlamak için kullanılır.

Örneğin, bir label I herhangi bir bilgi girişi için kullanılan TextBox a tanımlayıcı bilgi sağlamak için kullanabilirsiniz. Burada TextBox ile kullanıcıdan isim bilgisi aıyorsanız, label ın text özelliğini “Adınız” olarak set edebilirsiniz.

Daha farklı br örnekle yaklaşırsak, bir firma için e-mail validation yaptığınızı düşünürsek, form üzerinde o anda işlemde olan email adresini ekrada gösterebilirsiniz.

Text içeriklerin gösterilmesinin yanında label kontrolü Image özelliği kullanılarak resimde gösterebilir.

Aşağıdaki şekilde formumuzun üzerindeki bir btnMakeLabel butonunun Click eventine eklenen kodları görmektesiniz. Bu kodlar bir label nesnesinin kod üzerinden nasıl ekleneceğini göstermektedir. Bu işlemi ToolBox (Ctrl + Alt+ X) üzerinden forma sürükleyerek yapmamızda mümkündür. Fakat bu sadece Design time da yapılabilir. Runtime işlemleri kod blokları ile yapabilirsiniz.

Kod:
private void btnMakeLabel_Click(object sender, EventArgs e)
        {
            Label myNewLabel = new Label(); //Yeni bir label nesnesi oluşturup myNewLabel ismini veriyoruz.
            myNewLabel.BorderStyle = BorderStyle.Fixed3D; // border stilini fixed3D olarak ayarlar.
            myNewLabel.AutoSize = false; //Labelin manuel reize edilmesini sağlar. (Deault değeri true)
            myNewLabel.AutoEllipsis = true; //Label içeriği sınırlardan daha fazla olduğunda metni ... ile keser
            myNewLabel.BackColor = Color.WhiteSmoke; //Arkaplan rengini değiştiririz
            myNewLabel.ForeColor = Color.Black; // Yazı rengini değiştirir.
            myNewLabel.Enabled = true; //aktif ya da pasif olarak ayarlar. (default değeri true)
            myNewLabel.Location = new Point(20, 29); // Üzerinde oluşturulduğu kontrolün hangi koordinatta olacağını belirtir.
            myNewLabel.Visible = true; //görünür olup olmayacağını ayarlar.
            myNewLabel.Text = "Merhaba"; //Label üzerinde yazdığımız string ifadeyi gösterir.
            this.Controls.Add(myNewLabel); // Label nesnemizi formumuzun controls kolleksiyonuna ekler.

        }
Button Class: Buton sınıfından örneklediğimiz nesneleri formlarımızda sıkça kullanacaksınız. Bunlar günlük hayattaki düğmelerin yansımalarıdır. Ortada bir düğme vardır ve arkasında iş yapacak bir mekanızma bir düzenek. Aynı şey burada da vardır. Formumuza bir buton eklemek için System.Windows.Forms.Button sınıfından bir nesne oluştururuz ve bu nesnemize gerçek hayattaki düğmeye basılması olayı gibi bir clik event I ekleriz. Bu olay gerçekleştiğinde çalışacak bir mekanızmamız yani metodumuz vardır. Bu metota butona basıldığında yapılmasını istediğimiz kod bloklarını yazarız. Bir button mouse,spacebar yada enter tuşu ile clik eventini gerçekleştirebilir. Formunuzun AcceptButton or CancelButton özelliklerine butonu referans verirseniz Enter yada Esc tuşlarına bastığınızda buton aktif olmasa bile click event I gerçekleşecektir.

Aşağıdaki örnekte formumuzun load olurken bir button eklemektedir. Bu buttonun Click event ine myNewButton_Click adında bir metot bağlanıyor. Bu event gerçekleştiğinde yani butona tıklandığında myNewButton_Click içindeki MessageBox.Show komutu çalıştırılacaktır. Ayrıca bir önceki label kontrolünde gosterilen birçok özellik bu control içinde geçerlidir ve uygulanabilir. Bu önekteki bir farkı daha açıklayarak diğer kontrolümüze geçelim. Buradaki DialogResult özelliği, eğer butonun üzerinde bulunduğu formumuzu ShowDialog() ile görüntülersek bu formun bir diyalog penceresi olarak görüntülenmesine sebep olacaktır. Bu pencere kapatılmadan bu pencereyi gösteren forma dönüş yapamazsınız. Diyalog olarak açılan form bu butona basılarak kapatıldığında almasını istediğimiz diyalog sonuç türünü belirtir.

Kod:
void myNewButton_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Butona Basıldı.");
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            Button myNewButton = new Button();
            myNewButton.DialogResult = DialogResult.OK;
            myNewButton.Click += new EventHandler(myNewButton_Click);
            myNewButton.Image = Image.FromFile(@"C:\myPictures\xml.gif");
            myNewButton.TextImageRelation = TextImageRelation.ImageAboveText;
            myNewButton.Text = "Buton üzerinde Image ve Text";
            myNewButton.Location = new Point(30, 30);
            this.Controls.Add(myNewButton);
        }
ComboBox Class: ComboBox nesneleri, listBox ile birleştirilmiş bir textBox içeriside verileri göstermektedir. Kullanıcının listed bir değer seçmesine yada yeni bir değer girmesine izin verirler. ComboBox ın default davranışı; bir textbox ve bir gizli DropDown liste şeklinde görünmesidir. Bu stile DropDownStyle özelliği karar verir. Bunlar Simple, DropDown, DropDownList olmak üzere üç adettir. Nesnenin desteklediği BeginUpdate ve EndUpdate metotları sayesinde çok büyük aralıklardaki item girişleri sırasıdan her eleman için controlün tekrar çizilmesini engelleyebilirsiniz. FindString ve FindStringExact metotları ile nesne üzerinde string değer araması yapabilirsiniz. Bu metotlar int tipinde bir değer döndüreceklerdir. ComboBox ın Text özelliği ile o an seçili olan değeri handle edebilirsiniz. SelectedIndex özelliği seçili item I almak yada belirtmek için kullanılır.

Kod:
  private void Form3_Load(object sender, EventArgs e)
        {
            Object[] objects = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
            comboBox1.Items.AddRange(objects);
            comboBox1.Items.Insert(0, "Lütfen Seçiniz");
            comboBox1.SelectedIndex = 0;
            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
        }

        private void btnChangeData_Click(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            int[] myData = { 1, 2, 3, 4, 52, 2, 1 };
            comboBox1.DataSource = myData;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(comboBox1.Text + "\t" + comboBox1.SelectedIndex.ToString());
        }
TextBox Class: TextBox kontrolleri ile kullanıcılar uygulamalara veri girişiyapabilirler. TextBox kontrolleri ile kullanıcılar very girişi yapabildikleri gibi veri göstermek içinde bu kontrol ü kullanabilirler. Kontrolün sağladığı MultiLine özelliği iler birden fazla satır halinde veri girişi ypılabilir. PasswordChar ile girişlerini maskeleyebilirsiniz. Örneğin şifre girilmesini isteğinizde bu özelliği * karakteri ile kullanabilirsiniz. MaxLenght özellliği ile girdilerin uzunluklarını sınırlandırabilirsiniz. ReadOnly özelliğini true olarak set ettiğinizde artık kullanıcılar textBox a veri girişi yapamayacaklardır.

WordWrap özelliğini true olarak set ettiğinizde multiline girişlerde veri textBox genişliğinde kalacaktır. Genişliği aşan karakterler altsatırdan devam edeceklerdir.

Kod:
private void Form5_Load(object sender, EventArgs e)
        {
            TextBox myTextBox = new TextBox();
            myTextBox.WordWrap = true;
            myTextBox.Multiline = true;
            myTextBox.ScrollBars = ScrollBars.Vertical; //dikey kaydırma çubuğu ekler.
            myTextBox.Text = "Lütfen yorumlarınızı bizlere iletiniz.";
            myTextBox.MaxLength = 400;
            myTextBox.Width = 200;
            myTextBox.Height = 100;
            myTextBox.Location = new Point(30, 30);
            myTextBox.SelectionStart = myTextBox.Text.Length;//İmleci metnin sonuna konumlandırır.
            this.Controls.Add(myTextBox);
        }
MaskedTextBox Class: Kullanıcıların girişlerinin belirlenen bir maskeye uygun olup olmadığına karar veren kontroldür. Bu kontrol TextBox ın daha gelişmiş versiyonu olarak görülebilir. Bu kontrol ile girişler kontrol altına alınarak hatalı yapılan bir giriş reddedilir. Bu işlemde kullanılan maske kontrolün mask özelliği ile belirlenir. Örneğin maske olarak belirtilen “0000” olarak belirtilen bir maske kullanıcıdan dört adet 0 ve 9 arasında sayı girmesini istemektedir. Aynı şekilde “9000” ilk karakteri boşluk yada sayıdan oluşsan 4 adet giriş yapılması istenmektedir. Mask properity hakkında daha fazla bilgi edinmek istersen MSDN e başvurabilirsiniz.

PromptChar özelliği ile girilmesini beklediğiniz karaterlerin yerlerini belirten karakteri değiştirebilirsiniz. Bu özellik default olarak ’ _ ’ dir.

BeepOnError özelliği ile yapılmak istenen girişin geçersiz olması durumunda kullanıcıya sesli (Beep sesi) ile uyarı verebilirsiniz. Bu özellik default olarak false dir. Hatalı bir giriş yapıldığımdam MaskInputRejected event ateşlenir. Aşağıdaki örnekte genel bir tanımlama yapısı gösterilmektedir. Bu örnekte maske olarak tarih format kullanıldı.

Not: MaskTextBox Multine i ve Undo(gerial) fonksiyonelliğini desteklemez.

Kod:
private void Form4_Load(object sender, EventArgs e)
        {
            MaskedTextBox myMaskedTextbox = new MaskedTextBox();
            myMaskedTextbox.BeepOnError = true;
            myMaskedTextbox.Mask = "00/00/0000";
            myMaskedTextbox.PromptChar = '*';
            myMaskedTextbox.MaskInputRejected += new MaskInputRejectedEventHandler(myMaskedTextbox_MaskedInputRejected);
            myMaskedTextbox.Location = new Point(30, 30);
            this.Controls.Add(myMaskedTextbox);
        }
        private void myMaskedTextbox_MaskedInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            MessageBox.Show("Girdiğiniz değerleri kontrol ediniz.");
        }
CheckBox Class: CheckBox Kontrolü kullanıcıya bir seçenek sunar( evet / hayır gibi ). CheckBox kontrolleri bir resim yada metni gösterebilir ( yada herikisini). Appearance özellliği CheckBox ın buton şeklinde mi yoksa kutu şeklinde mi görüneceğini belirler. ThreeState özelliği kontrolün iki yada üç durumlu olarak çalışmasına karar verir. Default olarak değeri false dır. Checked özelliği iki durumlu kullanımda kontrolün kullanıcı tarafından seçilip seçilmediğine karar verir.

Not: Kontrolün ThreeState özelliği true ise Checked özelliği indeterminate ve checked durumlarının herikisinde de true değeri döndürür.

Kod:
 private void Form6_Load(object sender, EventArgs e)
        {
            CheckBox myCheckBox = new CheckBox();
            myCheckBox.AutoCheck = true;
            myCheckBox.Checked = true; //default olarak seçili
            myCheckBox.ThreeState = false;
            myCheckBox.Text = "Beni hatırla";
            myCheckBox.CheckStateChanged += new EventHandler(myCheckBox_CheckStateChanged);
            myCheckBox.Location = new Point(40, 40);
            this.Controls.Add(myCheckBox);
        }
        void myCheckBox_CheckStateChanged(object sender, EventArgs e)
        {
            MessageBox.Show("Kullanıcı seçimini değiştirdi.");
        }
RadioButton Class: RadioButton kontrolü kullanıcıya bir seçenek grubundan bir seçim yapma olanağı tanır. Aynı grupta aynı anda sadece bir seçenek aktif olabilir. RadioButton kontrolü CheckBox kontrolü ile neredeyse aynı özelliklere sahiptir. RadioButton un durumunu kontrol etmek için Checked özelliğini kontrol edebilirsiniz.

Kod:
RadioButton myRadioButton1 = new RadioButton();
        RadioButton myRadioButton2 = new RadioButton();
        private void Form7_Load(object sender, EventArgs e)
        {
            myRadioButton1.Text = "Üye olmak istiyorum.";
            myRadioButton1.Width = 200;
            myRadioButton1.Location = new Point(20, 20);
            myRadioButton1.Checked = true;
            /////////////
            myRadioButton2.Text = "Üye olmak istemiyorum.";
            myRadioButton2.Location = new Point(20, 40);
            myRadioButton2.Width = 200;
            this.Controls.Add(myRadioButton1);
            this.Controls.Add(myRadioButton2);


        }

        private void btnOnay_Click(object sender, EventArgs e)
        {
            if (myRadioButton1.Checked)
                MessageBox.Show("Üyelik isteğiniz değerlendirilecektir.");
            else
                MessageBox.Show("İlginiz için teşekkür ederim.");
        }


ListBox Class: ListBox kontrolü kullanıcıya maddelerden oluşan ve kullanıcı tarafıdan bu maddelerin seçilebildiği bir liste sunar. SelectionMode özelliği kontrolün tekli seçim yada çoklu seçim yapabilir olarak çalışmasını kontrol eder. MultiColumn özelliği true olarak set edilirse içerik elemanları listBox içerisinde yatay olarak sutunlar halinde listelenmesini sağlar. Değeri false olarak set edilirse listBox elemanları dikey olarak listeler. Bu özellik örnek ile açıklanmaktadır. Daha önceki kontrollerin sahip olduğu ve açıklanan BeginUpdate, EndUpdate, FindString ve FindStringExact metotları bu kontrol içinde mevcuttur. Farklı olarak SelectedIndices özelliği liste üzerinde seçilen elemanlerın koleksiyonunu tutar. SelectedIndices[0] ise listed ilk seçilen elemanın indexini döndürür.

Kod:
  ListBox myListbox = new ListBox();
        private void Form8_Load(object sender, EventArgs e)
        {
            myListbox.Size = new System.Drawing.Size(200, 100);
            myListbox.Location = new System.Drawing.Point(10, 10);
            myListbox.SelectedIndexChanged += new EventHandler(myListBox_SelectedIndexChanged);
            this.Controls.Add(myListbox);
            myListbox.MultiColumn = true;
            myListbox.SelectionMode = SelectionMode.MultiExtended;
            myListbox.BeginUpdate();
            for (int x = 1; x <= 100; x++)
            {
                myListbox.Items.Add("Eleman " + x.ToString());
            }
            myListbox.EndUpdate();
            myListbox.SetSelected(1, true);
            myListbox.SetSelected(2, true);
            myListbox.SetSelected(4, true);
        }

        void myListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            MessageBox.Show("Seçtiğiniz içerik : " + myListbox.Items[myListbox.SelectedIndex].ToString());

        }
LinkLabel Class: Hyperlinks gösterebilen bir label kontrolü olarak tanımlanabilir. LinkLabel kontrolü label kontrolü ile aynı özelliklere sahiptir artı olarak hyperlink gösterebilir. Birden çok hyperlink bir LinkLabel kontrolün text özelliği ile sağlanabilir. Bir tek üzerinde tanımlanan birden çok hyperlink farklı görevlere sahip olabilirler. LinkLabel kontrolünde gösterilen her link LinkLabel.Link sınıfından örneklenmiştir. LinkLabel.Link classının LinkData özelliği Hyperlinks ler hakkında bilgileri içerir. Örn: URL.

Kod:
LinkLabel myLinkLabel = new LinkLabel();

        private void Form9_Load(object sender, EventArgs e)
        {
            myLinkLabel.Text = "Merhaba bu text iki adet link içerecektir.";
            myLinkLabel.Text += "Birincisi Mocrosoftun resmi sitesine diğeri de hotmaile yönlenecektir.";
            myLinkLabel.Location = new Point(10, 20);
            myLinkLabel.Size = new System.Drawing.Size(500, 30);
            myLinkLabel.DisabledLinkColor = System.Drawing.Color.Red;
            myLinkLabel.VisitedLinkColor = System.Drawing.Color.Blue;
            myLinkLabel.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
            myLinkLabel.LinkColor = System.Drawing.Color.Navy;
            myLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(0, 8); //Merhaba da artık bir linktir.
            myLinkLabel.Links.Add(52, 10);
            myLinkLabel.Links.Add(88, 7);
            myLinkLabel.Links[0].LinkData = "Metideki merhaba kısmı tıklandı.";
            myLinkLabel.Links[1].LinkData = "http://www.microsoft.com";
            myLinkLabel.Links[2].LinkData = "http://www.hotmail.com";
            myLinkLabel.LinkClicked += new LinkLabelLinkClickedEventHandler(myLinkLabel_LinkClicked);
            this.Controls.Add(myLinkLabel);
        }
        void myLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            string link = e.Link.LinkData.ToString();
            if (link.StartsWith("http://"))
                System.Diagnostics.Process.Start(link);
            else
                MessageBox.Show(link);

        }
 
Yukarı Alt