ActiveControl Özelliği

Eyl 06, 2013

ActiveControl, C# programlama dilinde odaklanılan aracın (metin kutusu, düğme...vb.) üzerindeki aktif olan kontrolü döndüren çalışma-zamanlı (run-time) okunan bir özelliktir. Sözdizimi nesne.ActiveControl şeklindedir. ActiveControl özelliğinin geçerli bir değer döndürmesi için, bu özelliği çağıran nesnenin kontrolü içermesi gerekir. Bu özellik sayesinde kullanıcının yaptığı işlemlere bağlı olan çeşitli dinamik kontroller, form uygulamaları üzerine eklenir. Aktif olan ya da olmayan herhangi bir form her şekilde ActiveControl özelliğine sahip olabilir. Eğer bir form bir diğer formun AcitveControl özelliklerini çağırmaya çalışırsa, belirsiz bir değer alacaktır. Bu durumda ActiveControl tarafından bir verinin döndürülebilmesi için formlar arası iletişimin tasarımcı tarafından tanımlanması gerekir.

ActiveControl özelliği, MDI (Multiple-Document Interface - Çoklu-Doküman Arayüzü) uygulamalarında oldukça  kullanışlıdır. Bu özellik, formlar üzerinde bulunan düğmeler (Button) veya metin kutularındaki (TextBox) kontroller üzerinde bir işlem (process) başlatmak için kullanılır. Örneğin bir kullanıcı form üzerindeki bir düğmeye bastığında, yazılan kod sayesinde ActiveControl'e sahip metin referans edilebilir. ActiveControl sayesinde  formlara ve metin kutularına görsellik katmak, arka plan rengini değiştirmek ve araçlar üzerinde istenilen değişiklikleri uygulamak mümkündür.

Uygulama

C# ActiveControl özelliği  kullanılarak örnek bir uygulama yazılmıştır. Uygulama, bir form üzerindeki kontrol sayısını tutmaktadır. Uygulamada formun üzerindeki metin kutuları ile tutulan kontrol sayısı ilişkilendirilmiştir ve aktif olan metin kutusunun arka plan renginin pembe olması sağlanmıştır. Uygulama için Microsoft Visual Studio’da WindowsFormApplication projesi oluşturulmuştur. Varsayılan olarak gelen Form1 üzerine iki adet TextBox (Metin Kutusu) eklenmiş ve ActiveControl işlemleri bu metin kutuları üzerinden yapılmıştır.



Uygulamada TextBox_Selection() metodu kontrol işlemlerini yaparak ActiveControl’ün gösterdiği metin kutusunun rengini değiştirmektedir. Bu kontrolün sürekliliğini sağlamak adına TextBox_Selection() metodu, form yüklendiği anda (Form1.Load), Application.Idle delegesine atanmıştır. Böylece her bir kullanıcı işleminde metin kutularının kontrol edilmesi sağlanmıştır. Uygulamanın kodları aşağıdaki gibidir:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Uygulama
{
    public partial class Form1 : Form 
    { 
        public Form1()
        {
            InitializeComponent(); 
        }
      
       private void Form1_Load(object sender, EventArgs e)
       {
           Application.Idle += new EventHandler(TextBox_Select); 
       }

       private void TextBox_Select(object sender, EventArgs e) 
       { 
           int counter = this.Controls.Count; 
           for (int i = 0; i < counter; i++) 
           { 
                if (this.Controls[i] is TextBox) 
                { 
                    if (this.ActiveControl == this.Controls[i]) 
                        this.Controls[i].BackColor = Color.Pink; 
                    else 
                       this.Controls[i].BackColor = Color.White; 
                } 
            }
        }
       
        private void label1_Click(object sender, EventArgs e)
        {

        } 

        private void label2_Click(object sender, EventArgs e)
        { 

        }
    }
}
Kodun ekran çıktısı aşağıdaki gibi olmaktadır. Ekran çıktısında ActiveControl’ün çalıştığı metin kutusunun arka plan rengi pembe olmuştur.