İzlenecek yol: C ile bileşik denetim yazma#

Bileşik denetimler, özel grafik arabirimlerinin oluşturulup yeniden kullanılabilmesi için bir yol sağlar. Bileşik denetim temelde görsel temsili olan bir bileşendir. bu nedenle, kullanıcı girişini doğrulayarak, görüntü özelliklerini değiştirerek veya yazar için gereken diğer görevleri gerçekleştirerek işlevselliği genişletebilen bir veya daha fazla Windows Forms denetimi, bileşeni veya kod bloklarında bulunabilir. bileşik denetimler Windows Forms diğer denetimlerle aynı şekilde yerleştirilebilir. Bu izlenecek yolun ilk bölümünde adlı basit bir bileşik denetim oluşturursunuz ctlClock . İzlenecek yolun ikinci bölümünde, ctlClock Devralma ile işlevlerini genişletebilirsiniz.

Projeyi Oluşturma

Yeni bir proje oluşturduğunuzda, kök ad alanı, derleme adı ve proje adını ayarlamak için adını belirtin ve varsayılan bileşenin doğru ad alanında yer aldığından emin olun.

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

  1. Visual Studio, yeni bir Windows Forms denetim kitaplığı projesi oluşturun ve bunu ctlClockLib olarak adlandırın.

    Proje adı, 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ı bileşenler içeriyorsa ctlClock , ctlClock bileşenini kullanarak ctlClockLib.ctlClock.

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

    Not

    Varsayılan olarak, bileşik bir denetim UserControl sistem tarafından sunulan sınıftan devralınır. UserControlSınıfı, tüm bileşik denetimlerin gerektirdiği işlevselliği sağlar ve standart yöntemler ve özellikler uygular.

  3. Projeyi 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 temel 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 gösteride, bileşik denetiminizle Windows denetimleri ve işlevselliği uygulamak için kod yazmanız gerekir.

Bileşik denetilemenize bir etiket ve süreölçer eklemek için

  1. Çözüm Gezgini' de, ctlClock. cs' ye sağ tıklayın ve ardından tasarımcıyı görüntüle' ye tıklayın.

  2. Araç kutusunda ortak denetimler düğümünü genişletin ve ardından etiket' e çift tıklayın.

    Label label1 Tasarımcı yüzeyinde denetimciyle adlandırılmış bir denetim eklenir.

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

    Özellik Şununla değiştirin
    Ad lblDisplay
    Metin (blank space)
    TextAlign MiddleCenter
    Yazı tipi. boyutu 14
  4. Araç kutusunda, Bileşenler düğümünü genişletin ve ardından Zamanlayıcı' ya çift tıklayın.

    Bir Timer bileşen olduğundan, çalışma zamanında görsel temsili yoktur. Bu nedenle, tasarımcı yüzeyindeki denetimlerde görünmez, ancak Bileşen tasarımcısında (tasarımcı yüzeyinin altındaki bir tepsi) değil.

  5. Bileşen tasarımcısında, Süreölçer1' a tıklayın ve ardından Interval özelliğini 1000 ve Enabled özelliğini olarak ayarlayın true .

    IntervalÖzelliği bileşeni işaret eden sıklığı denetler Timer . Her zaman timer1 Tick, timer1_Tick olaydaki kodu çalıştırır. Aralık, zaman işaretleri arasındaki milisaniye sayısını temsil eder.

  6. Bileşen tasarımcısında, için Süreölçer1 öğesine çift tıklayarak timer1_Tick için olayına gidin ctlClock .

  7. Kodu aşağıdaki kod örneğine benzer olacak şekilde değiştirin. Erişim değiştiricisini ' dan ' a değiştirdiğinizden emin private olun protected .

    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 ' de görüntülenmesine neden olur lblDisplay . Aralığı timer1 olarak ayarlandığı için 1000 Bu olay her bin milisaniyede bir gerçekleşeceğinden, bu nedenle her saniye geçerli saati güncelliyor.

  8. Yöntemini anahtar sözcüğüyle geçersiz kılınabilir olacak şekilde değiştirin virtual . 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. Projeyi kaydetmek için Dosya menüsünde Tümünü Kaydet ' e tıklayın.

Bileşik denetime özellikler ekleme

Saat denetiminiz artık Label Timer , her biri kendi kendine ait özellikler kümesiyle birlikte bir denetimi ve bileşeni kapsüller. Bu denetimlerin tek tek özelliklerine denetiminizin sonraki kullanıcıları tarafından erişilemese de, uygun kod bloklarını yazarak özel özellikler oluşturabilir ve kullanıma sunabilirsiniz. Aşağıdaki yordamda, denetime, kullanıcının arka plan ve metin rengini değiştirmesini sağlayan özellikler ekleyeceksiniz.

Bileşik denetimi bir özellik eklemek için

  1. Çözüm Gezgini, ctlClock. cs öğesine sağ tıklayın ve ardından kodu görüntüle' ye tıklayın.

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

  2. İfadesini bulun public partial class ctlClock . Açma küme ayracı altında {) , 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. Aşağıdaki kodu adım 2 ' den değişken bildirimlerinin altına 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 iki özel özellik yapar ClockForeColor ve ClockBackColor Bu denetimin sonraki kullanıcıları tarafından kullanılabilir. getVe deyimleri, özellik set değerinin depolanmasını ve alınmasını, ayrıca özelliğine uygun işlevselliği uygulamak için de kod sağlar.

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

Denetimi test etme

Denetimler tek başına uygulamalar değildir; Bunlar bir kapsayıcıda barındırılmalıdır. Denetiminizin çalışma zamanı davranışını test edin ve özelliklerini UserControl Test kapsayıcısı ile çalıştırın. Daha fazla bilgi için bkz. nasıl yapılır: bir UserControl 'un Run-Time davranışını test etme.

Denetiminizi test etmek için

  1. Projeyi derlemek için F5 tuşuna basın ve denetimi UserControl Test kapsayıcısında çalıştırın.

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

  3. Tıklayarak bir renk seçin.

    Denetiminizin arka plan rengi, seçtiğiniz renge değişir.

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

    bu bölümde ve önceki bölümlerde, bileşen ve Windows denetimlerinin nasıl bir bileşik denetim biçiminde özel işlevler sağlamak üzere kodla ve paketlemeyle nasıl birleştirilebileceği gördünüz. Birleşik denetidiklerinizin özelliklerini açığa çıkarmak ve tamamlandıktan sonra denetiminizi test etmek için öğrendiniz. Sonraki bölümde, temel olarak kullanarak devralınmış bir bileşik denetim oluşturmayı öğreneceksiniz ctlClock .

Bileşik denetimden devralma

önceki bölümlerde, Windows denetimleri, bileşenleri ve kodu yeniden kullanılabilir bileşik denetimlere nasıl birleştirebileceğinizi öğrendiniz. Bileşik denetiminiz artık diğer denetimlerin derlenme temeli olarak kullanılabilir. Temel sınıftan bir sınıfın türeme işlemi Devralma olarak adlandırılır. Bu bölümde, adlı bir bileşik denetim oluşturacaksınız ctlAlarmClock . Bu denetim, üst denetiminden türetilecektir ctlClock . ctlClockÜst yöntemleri geçersiz kılarak ve yeni yöntemler ve özellikler ekleyerek işlevselliğini genişletmeyi öğreneceksiniz.

Devralınan bir denetim oluşturmanın ilk adımı onu üst öğesinden türemektir. Bu eylem, üst denetimin tüm özelliklerine, yöntemlerine ve grafiksel özelliklerine sahip yeni bir denetim oluşturur, ancak yeni veya değiştirilmiş işlevselliğin eklenmesi için temel olarak da davranabilir.

Devralınan denetimi oluşturmak için

  1. Çözüm Gezgini' de, ctlClockLib' a 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.cs ve ardından Ekle' ye tıklayın.

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

  4. Bileşen adı altında ctlClock' ye çift tıklayın.

  5. Çözüm Gezgini, geçerli projelere göz atabilirsiniz.

    Not

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

Alarm özelliklerini ekleme

Özellikler, devralınan bir denetime, Birleşik bir denetime eklendikçe aynı şekilde eklenir. Şimdi, denetimidir için iki özellik eklemek üzere özellik bildirimi söz dizimini kullanacaksınız: AlarmTime Bu, uyarının bitiş tarihini ve saatini depolayan ve AlarmSet alarmın ayarlanmış olup olmadığını belirtecektir.

Bileşik denetimi özellikler eklemek için

  1. Çözüm Gezgini' de, ctlAlarmClock' a sağ tıklayın ve ardından kodu görüntüle' ye tıklayın.

  2. İfadesini bulun public class . Denetiminizin öğesinden devraldığını unutmayın ctlClockLib.ctlClock . Açma küme ayracı ( {) deyimin 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 Ekle

Devralınan denetiminizin devraldığı denetimle özdeş bir görsel arabirimi vardır. Kendi üst denetimiyle aynı bileşen denetimlerine sahip olur, ancak yapısal denetimlerin özellikleri özellikle gösterilmedikleri sürece kullanılamaz. Devralınan bir bileşik denetimin grafik arabirimine, herhangi bir bileşik denetime ekleyeceğiniz şekilde ekleyebilirsiniz. Alarm saatinizin görsel arabirimine eklemeye devam etmek için, alarm bir işlem olduğunda Flash olacak bir etiket denetimi ekleyeceksiniz.

Etiket denetimi eklemek için

  1. Çözüm Gezgini' de, ctlAlarmClock' a sağ tıklayın ve ardından tasarımcıyı görüntüle' ye tıklayın.

    İçin tasarımcı 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.

    Not

    Tüm özellikler görüntülenirken, soluk olurlar. Bu özelliklerin yerel olduğunu lblDisplay ve Özellikler penceresi değiştirilemeyeceğini veya erişilmeyeceğini gösterir. Varsayılan olarak, bileşik denetimde bulunan denetimler private ve özellikleri herhangi bir şekilde erişilebilir değildir.

    Not

    Bileşik denetiminizin sonraki kullanıcılarının iç denetimlerine erişimi olmasını istiyorsanız, veya olarak bildirin public protected . Bu, uygun kodu kullanarak bileşik denetilinizin içindeki denetimlerin özelliklerini ayarlamanıza ve değiştirmenize izin verir.

  3. LabelBileşik denetimi bir denetim ekleyin.

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

    Özellik Ayar
    Ad lblAlarm
    Metin Alarm!
    TextAlign MiddleCenter
    Görünür false

Alarm Işlevlerini ekleme

Önceki yordamlarda, bileşik denetiminizdeki alarm işlevselliğini etkinleştiren Özellikler ve bir denetim eklediniz. Bu yordamda, geçerli saati alarm zamanına göre karşılaştırmak için kod ekleyeceksiniz ve aynı ise, bir alarm Flash için de aynı olduğunda. Yöntemini geçersiz kılarak timer1_Tick ctlClock ve buna ek kod ekleyerek, ctlAlarmClock tüm devralınan işlevlerini korurken özelliğini genişletebilirsiniz ctlClock .

CtlClock timer1_Tick yöntemini geçersiz kılmak için

  1. Kod düzenleyicisinde, private bool blnAlarmSet; ifadesini bulun. Hemen hemen altına aşağıdaki ifadeyi ekleyin.

    private bool blnColorTicker;
    
  2. Kod Düzenleyicisi'nde, kapatma küme ayracını ( }) sınıfının sonundaki) 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. overrideİfade, denetimi temel denetimden devralınan yöntemin yerine bu yöntemi kullanacak şekilde yönlendirir. Bu yöntem çağrıldığında, ifadeyi çağırarak geçersiz kıldığından, base.timer1_Tick özgün denetimde dahil edilen tüm işlevlerin Bu denetimde yeniden üretildiğinden emin olarak çağrılır. Daha sonra alarm işlevselliğini birleştirmek için ek kod çalıştırır. Uyarı oluştuğunda yanıp sönen bir etiket denetimi görünür.

    Alarm saati denetiminiz neredeyse tamamlanmıştır. Kalan tek şey, devre dışı bırakmak için bir yol uygulamaktır. Bunu yapmak için yöntemine kod ekleyeceksiniz lblAlarm_Click .

Shutoff yöntemini uygulamak için

  1. Çözüm Gezgini' de, ctlAlarmClock. cs' ye sağ tıklayın ve ardından tasarımcıyı görüntüle' ye tıklayın.

    Tasarımcı açılır.

  2. Denetime 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' a çift tıklayın.

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

  4. Bu yöntemi, aşağıdaki koda benzer olacak ş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. Projeyi kaydetmek için Dosya menüsünde Tümünü Kaydet ' e tıklayın.

Bir form üzerinde devralınan denetimi kullanma

Devralınan denetiminizi, temel sınıf denetimini sınadığınız şekilde test edebilirsiniz, ctlClock : F5 tuşuna basarak projeyi oluşturun ve denetiminizi UserControl Test kapsayıcısında çalıştırın. Daha fazla bilgi için bkz. nasıl yapılır: bir UserControl 'un Run-Time davranışını test etme.

Denetiminizi kullanmak üzere yerleştirmek için bir form üzerinde barındırmanıza gerek duyarsınız. Standart bir bileşik denetimde olduğu gibi, devralınan bir bileşik denetim tek başına olamaz ve bir formda ya da başka bir kapsayıcıda barındırılmalıdır. ctlAlarmClockDaha büyük bir işlevsellik derinliğine sahip olduğundan, test etmek için ek kod gereklidir. Bu yordamda, işlevselliğini test etmek için basit bir program yazacaksınız ctlAlarmClock . Özelliğini ayarlamak ve göstermek için kod yazacaksınız AlarmTime ctlAlarmClock ve onun kendi işlevlerini test edecektir.

Denetimi derlemek ve test formuna eklemek için

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

  2. çözüme yeni bir Windows Forms uygulama projesi ekleyin ve Test edin.

  3. Çözüm Gezgini, test projeniz için Başvurular düğümüne sağ tıklayın. Başvuru Ekle iletişim kutusunu göstermek Için Başvuru Ekle ' ye tıklayın. Etiketli Projeler sekmesine tıklayın. ctlClockLibprojeniz Project adı altında listelenir. Başvuruyu test projesine eklemek için projeye çift tıklayın.

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

  5. Araç kutusunda ctlClockLib Components düğümünü genişletin.

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

  7. Araç kutusunda, formunuza bir denetim eklemek için DateTimePicker ' ı bulup çift tıklayın DateTimePicker ve ardından etiket ' e Label çift tıklayarak bir denetim ekleyin.

  8. Denetimleri form üzerinde uygun bir yerde konumlandırmak 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çimlendir Time
  10. Tasarımcıda dtpTest öğesine çift tıklayın.

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

  11. Kodu aşağıdakine benzer olacak ş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' de Test' e sağ tıklayın ve ardından Başlangıç Project 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. Denetimde geçerli saatin güncelleştirildiğini ctlAlarmClock ve başlangıç saatinin denetimde gösterildiğini unutmayın DateTimePicker .

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

  15. Klavyeyi kullanarak, tarafından gösterilen geçerli saatten bir dakika daha büyük bir değer ayarlayın ctlAlarmClock .

    Uyarı ayarının zamanı içinde gösterilir lblTest . Uyarı ayarı zamanına ulaşmak için, görüntülenecek sürenin bekleyin. Görünen süre, alarmın ayarlandığı zamana ulaştığında, lblAlarm Flash olur.

  16. Tıklayarak uyarıyı kapatın btnAlarmOff . Şimdi uyarıyı sıfırlayabilirsiniz.

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

Ayrıca bkz.