İzlenecek yol: C ile Bileşik Denetim Yazma#

Bileşik denetimler, özel grafik arabirimlerin oluşturulabileceği ve yeniden kullanılabilmesi için bir araç sağlar. Bileşik denetim temelde görsel temsili olan bir bileşendir. Bu nedenle, kullanıcı girişini doğrulayarak, görüntüleme özelliklerini değiştirerek veya yazarın gerektirdiği diğer görevleri gerçekleştirerek işlevselliği genişletebilen bir veya daha fazla Windows Forms denetiminden, bileşeninden veya kod bloğundan oluşabilir. Bileşik denetimler, Windows Forms'a diğer denetimler gibi yerleştirilebilir. Bu kılavuzun ilk bölümünde adlı ctlClockbasit bir bileşik denetim oluşturursunuz. İzlenecek kılavuzun ikinci bölümünde, işlevselliğini ctlClock devralma yoluyla genişletirsiniz.

Projeyi Oluşturma

Yeni bir proje oluşturduğunuzda, kök ad alanını, derleme adını ve proje adını ayarlamak ve varsayılan bileşenin doğru ad alanında olmasını sağlamak için adını belirtirsiniz.

ctlClockLib denetim kitaplığını ve ctlClock denetimini oluşturmak için

  1. Visual Studio'da yeni bir Windows Forms Denetim Kitaplığı projesi oluşturun ve ctlClockLib olarak adlandırın.

    Proje adı olan ctlClockLib, varsayılan olarak kök ad alanına da atanır. Kök ad alanı, derlemedeki bileşenlerin adlarını nitelemek için kullanılır. Örneğin, iki derleme adlı ctlClockbileşenler sağlıyorsa, kullanarak bileşeninizi ctlClock belirtebilirsiniz ctlClockLib.ctlClock.

  2. Çözüm Gezgini'da UserControl1.cs'ye sağ tıklayın ve ardından Yeniden Adlandır'a tıklayın. Dosya adını olarak ctlClock.csdeğiştirin. "UserControl1" kod öğesine yapılan tüm başvuruları yeniden adlandırmak isteyip istemediğiniz sorulduğunda Evet düğmesine tıklayın.

    Dekont

    Varsayılan olarak, bileşik denetim sistem tarafından sağlanan sınıfından devralır UserControl . UserControl sınıfı, tüm bileşik denetimler için gerekli işlevleri sağlar ve standart yöntemler ve özellikler uygular.

  3. Dosyayı kaydetmek için Dosya menüsünde Tümünü Kaydet'e tıklayın.

Bileşik Denetime Windows Denetimleri ve Bileşenleri Ekleme

Görsel arabirim, bileşik denetiminizin önemli bir parçasıdır. Bu görsel arabirim, tasarımcı yüzeyine bir veya daha fazla Windows denetimi eklenerek uygulanır. Aşağıdaki tanıtımda, windows denetimlerini bileşik denetiminize dahil edecek ve işlevselliği uygulamak için kod yazacaksınız.

Bileşik denetiminize Etiket ve Zamanlayıcı eklemek için

  1. Çözüm Gezgini'da ctlClock.cs dosyasına sağ tıklayın ve ardından Tasarım Aracı Görüntüle'ye tıklayın.

  2. Araç Kutusu'nda Ortak Denetimler düğümünü genişletin ve Etiket'e çift tıklayın.

    Label Tasarımcı yüzeyindeki denetiminize adlı label1 bir denetim eklenir.

  3. Tasarımcıda etiket1'e tıklayın. Özellikler penceresi aşağıdaki özellikleri ayarlayın.

    Özellik Şununla değiştirin:
    Ad lblDisplay
    Metin (blank space)
    Textalign MiddleCenter
    Font.Size 14
  4. Araç Kutusu'nda Bileşenler düğümünü genişletin ve zamanlayıcı'ya çift tıklayın.

    bir Timer bileşen olduğundan, çalışma zamanında görsel gösterimi yoktur. Bu nedenle, tasarımcı yüzeyindeki denetimlerle değil, Bileşen Tasarım Aracı (tasarımcı yüzeyinin altındaki bir tepsi) içinde görünür.

  5. Bileşen Tasarım Aracı zamanlayıcı1'e tıklayın ve ardından özelliğini 1000 olarak ve Enabled özelliğini olarak trueayarlayınInterval.

    özelliği, Interval bileşenin işaretlediği Timer sıklığı denetler. Her zaman timer1 tıklar, olay kodu timer1_Tick çalıştırır. Aralık, keneler arasındaki milisaniye sayısını temsil eder.

  6. Bileşen Tasarım Aracı, zamanlayıcı1'e çift tıklayarak olayına timer1_TickctlClockgidin.

  7. Kodu, aşağıdaki kod örneğine benzeyecek şekilde değiştirin. Erişim değiştiricisini olarak değiştirdiğinizden privateprotectedemin olun.

    protected void timer1_Tick(object sender, System.EventArgs e)
    {
        // Causes the label to display the current time.
        lblDisplay.Text = DateTime.Now.ToLongTimeString();
    }
    

    Bu kod, geçerli saatin içinde lblDisplaygösterilmesine neden olur. aralığı olarak ayarlandığından timer11000, bu olay her bin milisaniyede bir gerçekleşir ve bu nedenle geçerli saati her saniye güncelleştirir.

  8. yöntemini anahtar sözcüğüyle virtual geçersiz kılınabilecek şekilde değiştirin. Daha fazla bilgi için aşağıdaki "Kullanıcı Denetiminden Devralma" bölümüne bakın.

    protected virtual void timer1_Tick(object sender, System.EventArgs e)
    
  9. Dosyayı kaydetmek için Dosya menüsünde Tümünü Kaydet'e tıklayın.

Bileşik Denetime Özellikler Ekleme

Saat denetiminiz artık her biri kendi doğal özellikler kümesine sahip bir Label denetimi ve bileşeni Timer kapsüller. Bu denetimlerin tek tek özellikleri, denetiminizin sonraki kullanıcıları tarafından erişilemez olsa da, uygun kod bloklarını yazarak özel özellikler oluşturabilir ve kullanıma sağlayabilirsiniz. Aşağıdaki yordamda, denetiminize kullanıcının arka plan ve metnin rengini değiştirmesini sağlayan özellikler ekleyebilirsiniz.

Bileşik denetiminize özellik eklemek için

  1. Çözüm Gezgini'da ctlClock.cs dosyasına sağ tıklayın ve ardından Kodu Görüntüle'ye tıklayın.

    Denetiminizin Kod Düzenleyicisi açılır.

  2. deyimini public partial class ctlClock bulun. Açılış ayracının altına (){) aşağıdaki kodu yazın.

    private Color colFColor;
    private Color colBColor;
    

    Bu deyimler, oluşturmak üzere olduğunuz özelliklerin değerlerini depolamak için kullanacağınız özel değişkenleri oluşturur.

  3. 2. adımdaki değişken bildirimlerinin altına aşağıdaki kodu girin veya yapıştırın.

    // Declares the name and type of the property.
    public Color ClockBackColor
    {
        // Retrieves the value of the private variable colBColor.
        get
        {
            return colBColor;
        }
        // Stores the selected value in the private variable colBColor, and
        // updates the background color of the label control lblDisplay.
        set
        {
            colBColor = value;
            lblDisplay.BackColor = colBColor;
        }
    }
    // Provides a similar set of instructions for the foreground color.
    public Color ClockForeColor
    {
        get
        {
            return colFColor;
        }
        set
        {
            colFColor = value;
            lblDisplay.ForeColor = colFColor;
        }
    }
    

    Yukarıdaki kod, ClockForeColorClockBackColorve olmak üzere iki özel özelliği bu denetimin sonraki kullanıcıları tarafından kullanılabilir hale getirir. get ve set deyimleri, özellik değerinin depolanmasını ve alınmasının yanı sıra özelliğe uygun işlevselliği uygulamak için kod sağlar.

  4. Dosyayı kaydetmek için Dosya menüsünde Tümünü Kaydet'e tıklayın.

Denetimi Test Edin

Denetimler tek başına uygulamalar değildir; bir kapsayıcıda barındırılmalıdır. Denetiminizin çalışma zamanı davranışını test edin ve UserControl Test Kapsayıcısı ile özelliklerini alıştırma yapın. Daha fazla bilgi için bkz . Nasıl yapılır: UserControl'ün Çalışma Zamanı Davranışını Test Etme.

Denetiminizi test etmek için

  1. Projeyi oluşturmak için F5 tuşuna basın ve denetiminizi UserControl Test Kapsayıcısı'nda çalıştırın.

  2. Test kapsayıcısının özellik kılavuzunda özelliği bulun ClockBackColor ve ardından renk paletini görüntülemek için özelliğini seçin.

  3. Tıklayarak bir renk seçin.

    Denetiminizin arka plan rengi seçtiğiniz renge dönüşür.

  4. Özelliğin beklendiği gibi çalıştığını doğrulamak ClockForeColor için benzer bir olay dizisi kullanın.

    Bu bölümde ve önceki bölümlerde bileşenlerin ve Windows denetimlerinin bileşik denetim biçiminde özel işlevsellik sağlamak için kod ve paketleme ile nasıl birleştirilebileceğini gördünüz. Bileşik denetiminizdeki özellikleri kullanıma sunma ve tamamlandıktan sonra denetiminizi test etme hakkında bilgi edindiniz. Sonraki bölümde temel olarak kullanarak ctlClock devralınan bileşik denetimi oluşturmayı öğreneceksiniz.

Bileşik Denetimden Devralma

Önceki bölümlerde Windows denetimlerini, bileşenlerini ve kodunu yeniden kullanılabilir bileşik denetimler halinde birleştirmeyi öğrendiniz. Bileşik denetiminiz artık diğer denetimlerin oluşturulabileceği bir temel olarak kullanılabilir. Temel sınıftan bir sınıf türetme işlemi devralma olarak adlandırılır. Bu bölümde adlı ctlAlarmClockbir bileşik denetim oluşturacaksınız. Bu denetim, üst denetimi ctlClockolan öğesinden türetilir. Üst yöntemleri geçersiz kılıp yeni yöntemler ve özellikler ekleyerek işlevini ctlClock genişletmeyi öğreneceksiniz.

Devralınan bir denetim oluşturmanın ilk adımı, bunu üst öğesinden türetmektir. Bu eylem, üst denetimin tüm özelliklerine, yöntemlerine ve grafik özelliklerine sahip yeni bir denetim oluşturur, ancak yeni veya değiştirilmiş işlevlerin eklenmesi için bir temel görevi de görebilir.

Devralınan denetimi oluşturmak için

  1. Çözüm Gezgini'da ctlClockLib öğesine sağ tıklayın, Ekle'nin üzerine gelin ve kullanıcı denetimi'ne tıklayın.

    Yeni Öğe Ekle iletişim kutusu açılır.

  2. Devralınan Kullanıcı Denetimi şablonunu seçin.

  3. Ad kutusuna yazın ctlAlarmClock.csve Ekle'ye tıklayın.

    Devralma Seçici iletişim kutusu görüntülenir.

  4. Bileşen Adı'nın altında ctlClock öğesine çift tıklayın.

  5. Çözüm Gezgini'da geçerli projelere göz atın.

    Dekont

    Geçerli projeye ctlAlarmClock.cs adlı bir dosya eklendi.

Alarm Özelliklerini Ekleme

Özellikler, devralınan denetime bileşik denetime eklendikleri gibi eklenir. Şimdi denetiminize iki özellik eklemek için özellik bildirimi söz dizimini kullanacaksınız: AlarmTime, alarmın kapatılacağı tarih ve saatin değerini depolar ve AlarmSetbu da alarmın ayarlanıp ayarlanmadığını gösterir.

Bileşik denetiminize özellikler eklemek için

  1. Çözüm Gezgini'da ctlAlarmClock öğesine sağ tıklayın ve ardından Kodu Görüntüle'ye tıklayın.

  2. deyimini public class bulun. Denetiminizin öğesinden ctlClockLib.ctlClockdevralındığını unutmayın. Açılış ayracı ({) deyiminin altına aşağıdaki kodu yazın.

    private DateTime dteAlarmTime;
    private bool blnAlarmSet;
    // These properties will be declared as public to allow future
    // developers to access them.
    public DateTime AlarmTime
    {
        get
        {
            return dteAlarmTime;
        }
        set
        {
            dteAlarmTime = value;
        }
    }
    public bool AlarmSet
    {
        get
        {
            return blnAlarmSet;
        }
        set
        {
            blnAlarmSet = value;
        }
    }
    

Denetimin Grafik Arabirimine Ekleme

Devralınan denetiminizin devraldığı denetimle aynı olan bir görsel arabirimi var. Üst denetimiyle aynı kurucu denetimlere sahiptir, ancak özel olarak kullanıma sunulmadığı sürece, kurucu denetimlerin özellikleri kullanılamaz. Devralınan bileşik denetimin grafik arabirimine, herhangi bir bileşik denetime eklediğiniz şekilde ekleyebilirsiniz. Çalar saatinizin görsel arabirimine eklemeye devam etmek için, alarm çalarken yanıp sönecek bir etiket denetimi eklersiniz.

Etiket denetimini eklemek için

  1. Çözüm Gezgini'da, ctlAlarmClock öğesine sağ tıklayın ve ardından Tasarım Aracı Görüntüle'ye tıklayın.

    tasarımcısı ctlAlarmClock ana pencerede açılır.

  2. Denetimin görüntüleme bölümüne tıklayın ve Özellikler penceresi görüntüleyin.

    Dekont

    Tüm özellikler görüntülenirken, bunlar soluk görüntülenir. Bu, bu özelliklerin yerel lblDisplay olduğunu ve Özellikler penceresi değiştirilemeyeceğini veya erişilemeyeceğini gösterir. Varsayılan olarak, bileşik denetimde yer alan denetimler şeklindedir privateve özelliklerine hiçbir şekilde erişilemez.

    Dekont

    Bileşik denetiminizin sonraki kullanıcılarının iç denetimlerine erişmesini istiyorsanız, bunları veya protectedolarak public bildirin. Bu, uygun kodu kullanarak bileşik denetiminizin içindeki denetimlerin özelliklerini ayarlamanıza ve değiştirmenize olanak sağlar.

  3. Bileşik denetiminize bir Label denetim ekleyin.

  4. Fareyi kullanarak, denetimi ekran kutusunun hemen altına sürükleyin Label . Özellikler penceresi aşağıdaki özellikleri ayarlayın.

    Özellik Ayar
    Ad lblAlarm
    Metin Alarm!
    Textalign MiddleCenter
    Visible false

Alarm İşlevselliğini Ekleme

Önceki yordamlarda bileşik denetiminizde alarm işlevselliğini etkinleştirecek özellikler ve denetim eklediniz. Bu yordamda, geçerli saati alarm saatiyle karşılaştırmak ve aynıysa bir alarm basmak için kod ekleyebilirsiniz. yöntemini geçersiz kılarak timer1_Tick ve buna ek kod ekleyerek, tüm doğal işlevselliğini ctlClockkorurken özelliğini genişletirsinizctlAlarmClock.ctlClock

ctlClock'un timer1_Tick yöntemini geçersiz kılmak için

  1. Kod Düzenleyicisi'nde deyimini private bool blnAlarmSet; bulun. Hemen altına aşağıdaki deyimi ekleyin.

    private bool blnColorTicker;
    
  2. Kod Düzenleyicisi'nde, sınıfın sonundaki kapanış ayracı (}) öğesini bulun. Küme ayracından hemen önce aşağıdaki kodu ekleyin.

    protected override void timer1_Tick(object sender, System.EventArgs e)
    {
        // Calls the Timer1_Tick method of ctlClock.
        base.timer1_Tick(sender, e);
        // Checks to see if the alarm is set.
        if (AlarmSet == false)
            return;
        else
            // If the date, hour, and minute of the alarm time are the same as
            // the current time, flash an alarm.
        {
            if (AlarmTime.Date == DateTime.Now.Date && AlarmTime.Hour ==
                DateTime.Now.Hour && AlarmTime.Minute == DateTime.Now.Minute)
            {
                // Sets lblAlarmVisible to true, and changes the background color based on
                // the value of blnColorTicker. The background color of the label
                // will flash once per tick of the clock.
                lblAlarm.Visible = true;
                if (blnColorTicker == false)
                {
                    lblAlarm.BackColor = Color.Red;
                    blnColorTicker = true;
                }
                else
                {
                    lblAlarm.BackColor = Color.Blue;
                    blnColorTicker = false;
                }
            }
            else
            {
                // Once the alarm has sounded for a minute, the label is made
                // invisible again.
                lblAlarm.Visible = false;
            }
        }
    }
    

    Bu kodun eklenmesi birkaç görevi gerçekleştirir. deyimi, override denetimi temel denetimden devralınan yöntemin yerine bu yöntemi kullanmaya yönlendirir. Bu yöntem çağrıldığında, deyimini çağırarak base.timer1_Tick geçersiz kıldığı yöntemi çağırır ve özgün denetime dahil edilen tüm işlevlerin bu denetimde yeniden üretilmesini sağlar. Ardından alarm işlevselliğini dahil etmek için ek kod çalıştırır. Alarm oluştuğunda yanıp sönen bir etiket denetimi görüntülenir.

    Çalar saat denetiminiz neredeyse tamamlandı. Geriye kalan tek şey, kapatmak için bir yol uygulamaktır. Bunu yapmak için yöntemine lblAlarm_Click kod ekleyebilirsiniz.

Kapatma yöntemini uygulamak için

  1. Çözüm Gezgini'da ctlAlarmClock.cs dosyasına sağ tıklayın ve ardından Tasarım Aracı Görüntüle'ye tıklayın.

    Tasarımcı açılır.

  2. Denetime bir düğme ekleyin. Düğmenin özelliklerini aşağıdaki gibi ayarlayın.

    Özellik Değer
    Ad btnAlarmOff
    Metin Alarmı Devre Dışı Bırak
  3. Tasarımcıda btnAlarmOff öğesine çift tıklayın.

    Kod Düzenleyicisi satıra private void btnAlarmOff_Click açılır.

  4. Bu yöntemi aşağıdaki koda benzeyecek şekilde değiştirin.

    private void btnAlarmOff_Click(object sender, System.EventArgs e)
    {
        // Turns off the alarm.
        AlarmSet = false;
        // Hides the flashing label.
        lblAlarm.Visible = false;
    }
    
  5. Dosyayı kaydetmek için Dosya menüsünde Tümünü Kaydet'e tıklayın.

Bir Formda Devralınan Denetimi Kullanma

Devralınan denetiminizi, temel sınıf denetimini ctlClocktest ettiğiniz gibi test edebilirsiniz: Projeyi oluşturmak ve denetiminizi UserControl Test Kapsayıcısı'nda çalıştırmak için F5 tuşuna basın. Daha fazla bilgi için bkz . Nasıl yapılır: UserControl'ün Çalışma Zamanı Davranışını Test Etme.

Denetiminizi kullanmak için bir formda barındırmanız gerekir. Standart bileşik denetimde olduğu gibi, devralınan bileşik denetim tek başına duramaz ve bir formda veya başka bir kapsayıcıda barındırılmalıdır. İşlevsellik derinliği daha fazla olduğundan ctlAlarmClock , test etmek için ek kod gerekir. Bu yordamda, işlevini ctlAlarmClocktest etmek için basit bir program yazacaksınız. özelliğini ctlAlarmClockayarlayıp görüntülemek AlarmTime için kod yazacak ve kendi işlevlerini test edeceksiniz.

Denetiminizi derlemek ve test formuna eklemek için

  1. Çözüm Gezgini'de ctlClockLib öğesine sağ tıklayın ve ardından Oluştur'a tıklayın.

  2. Çözüme yeni bir Windows Forms Uygulaması projesi ekleyin ve test olarak adlandırın.

  3. Çözüm Gezgini'da test projeniz için Başvurular düğümüne sağ tıklayın. Başvuru Ekle iletişim kutusunu görüntülemek için Başvuru Ekle'ye tıklayın. Projeler etiketli sekmeye tıklayın. Projeniz ctlClockLib Proje Adı altında listelenir. Başvuruyu test projesine eklemek için projeye çift tıklayın.

  4. Çözüm Gezgini'da Test'e sağ tıklayın ve ardından Oluştur'a tıklayın.

  5. Araç Kutusu'nda ctlClockLib Bileşenleri düğümünü genişletin.

  6. Formunuza kopyasını ctlAlarmClock eklemek için ctlAlarmClock öğesine çift tıklayın.

  7. Araç Kutusu'nda DateTimePicker'ı bulup çift tıklayarak formunuza denetim DateTimePicker ekleyin ve ardından Etiket'e çift tıklayarak bir Label denetim ekleyin.

  8. Denetimleri formda uygun bir yere yerleştirmek için fareyi kullanın.

  9. Bu denetimlerin özelliklerini aşağıdaki şekilde ayarlayın.

    Denetim Özellik Değer
    label1 Metin (blank space)
    Ad lblTest
    dateTimePicker1 Ad dtpTest
    Biçim Time
  10. Tasarımcıda dtpTest'e çift tıklayın.

    Kod Düzenleyicisi olarak private void dtpTest_ValueChangedaçılır.

  11. Kodu aşağıdakine benzeyecek şekilde değiştirin.

    private void dtpTest_ValueChanged(object sender, System.EventArgs e)
    {
        ctlAlarmClock1.AlarmTime = dtpTest.Value;
        ctlAlarmClock1.AlarmSet = true;
        lblTest.Text = "Alarm Time is " +
            ctlAlarmClock1.AlarmTime.ToShortTimeString();
    }
    
  12. Çözüm Gezgini'da Test'e sağ tıklayın ve ardından Başlangıç Projesi Olarak Ayarla'ya tıklayın.

  13. Hata ayıkla menüsünde Hata Ayıklamayı Başlat’a tıklayın.

    Test programı başlar. Geçerli saatin denetimde ctlAlarmClock güncelleştirildiğini ve başlangıç saatinin denetimde gösterildiğini DateTimePicker unutmayın.

  14. DateTimePicker Saat dakikalarının görüntülendiği yere tıklayın.

  15. Klavyeyi kullanarak dakikalar için tarafından gösterilen ctlAlarmClockgeçerli saatten bir dakika daha büyük bir değer ayarlayın.

    Alarm ayarının zamanı içinde lblTestgösterilir. Görüntülenen sürenin alarm ayar zamanına ulaşmasını bekleyin. Görüntülenen süre, alarmın ayarlandığı zamana ulaştığında, lblAlarm yanıp söner.

  16. öğesine tıklayarak btnAlarmOffalarmı kapatın. Artık alarmı sıfırlayabilirsiniz.

Bu makalede bir dizi temel kavram ele alınmıştır. Denetimleri ve bileşenleri bileşik denetim kapsayıcısı içinde birleştirerek bileşik denetim oluşturmayı öğrendinsiniz. Denetiminize özellik eklemeyi ve özel işlevsellik uygulamak için kod yazmayı öğrendinsiniz. Son bölümde, devralma yoluyla belirli bir bileşik denetimin işlevselliğini genişletmeyi ve bu yöntemleri geçersiz kılarak konak yöntemlerinin işlevselliğini değiştirmeyi öğrendinsiniz.

Ayrıca bkz.