İ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ı ctlClock
basit 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
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ıctlClock
bileşenler sağlıyorsa, kullanarak bileşeninizictlClock
belirtebilirsinizctlClockLib.ctlClock.
Çö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.cs
değ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.
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
Çö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.
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.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
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.
Bileşen Tasarım Aracı zamanlayıcı1'e tıklayın ve ardından özelliğini
1000
olarak ve Enabled özelliğini olaraktrue
ayarlayınInterval.özelliği, Interval bileşenin işaretlediği Timer sıklığı denetler. Her zaman
timer1
tıklar, olay kodutimer1_Tick
çalıştırır. Aralık, keneler arasındaki milisaniye sayısını temsil eder.Bileşen Tasarım Aracı, zamanlayıcı1'e çift tıklayarak olayına
timer1_Tick
ctlClock
gidin.Kodu, aşağıdaki kod örneğine benzeyecek şekilde değiştirin. Erişim değiştiricisini olarak değiştirdiğinizden
private
protected
emin 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
lblDisplay
gösterilmesine neden olur. aralığı olarak ayarlandığındantimer1
1000
, bu olay her bin milisaniyede bir gerçekleşir ve bu nedenle geçerli saati her saniye güncelleştirir.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)
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
Çö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.
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.
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,
ClockForeColor
ClockBackColor
ve olmak üzere iki özel özelliği bu denetimin sonraki kullanıcıları tarafından kullanılabilir hale getirir.get
veset
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.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
Projeyi oluşturmak için F5 tuşuna basın ve denetiminizi UserControl Test Kapsayıcısı'nda çalıştırın.
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.Tıklayarak bir renk seçin.
Denetiminizin arka plan rengi seçtiğiniz renge dönüşür.
Ö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ı ctlAlarmClock
bir bileşik denetim oluşturacaksınız. Bu denetim, üst denetimi ctlClock
olan öğ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
Çö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.
Devralınan Kullanıcı Denetimi şablonunu seçin.
Ad kutusuna yazın
ctlAlarmClock.cs
ve Ekle'ye tıklayın.Devralma Seçici iletişim kutusu görüntülenir.
Bileşen Adı'nın altında ctlClock öğesine çift tıklayın.
Çö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 AlarmSet
bu da alarmın ayarlanıp ayarlanmadığını gösterir.
Bileşik denetiminize özellikler eklemek için
Çözüm Gezgini'da ctlAlarmClock öğesine sağ tıklayın ve ardından Kodu Görüntüle'ye tıklayın.
deyimini
public class
bulun. Denetiminizin öğesindenctlClockLib.ctlClock
devralı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
Çö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.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 şeklindedirprivate
ve özelliklerine hiçbir şekilde erişilemez.Dekont
Bileşik denetiminizin sonraki kullanıcılarının iç denetimlerine erişmesini istiyorsanız, bunları veya
protected
olarakpublic
bildirin. Bu, uygun kodu kullanarak bileşik denetiminizin içindeki denetimlerin özelliklerini ayarlamanıza ve değiştirmenize olanak sağlar.Bileşik denetiminize bir Label denetim ekleyin.
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 ctlClock
korurken özelliğini genişletirsinizctlAlarmClock
.ctlClock
ctlClock'un timer1_Tick yöntemini geçersiz kılmak için
Kod Düzenleyicisi'nde deyimini
private bool blnAlarmSet;
bulun. Hemen altına aşağıdaki deyimi ekleyin.private bool blnColorTicker;
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ğırarakbase.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
Çö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.
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 Tasarımcıda btnAlarmOff öğesine çift tıklayın.
Kod Düzenleyicisi satıra
private void btnAlarmOff_Click
açılır.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; }
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 ctlClock
test 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 ctlAlarmClock
test etmek için basit bir program yazacaksınız. özelliğini ctlAlarmClock
ayarlayıp görüntülemek AlarmTime
için kod yazacak ve kendi işlevlerini test edeceksiniz.
Denetiminizi derlemek ve test formuna eklemek için
Çözüm Gezgini'de ctlClockLib öğesine sağ tıklayın ve ardından Oluştur'a tıklayın.
Çözüme yeni bir Windows Forms Uygulaması projesi ekleyin ve test olarak adlandırın.
Çö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.Çözüm Gezgini'da Test'e sağ tıklayın ve ardından Oluştur'a tıklayın.
Araç Kutusu'nda ctlClockLib Bileşenleri düğümünü genişletin.
Formunuza kopyasını
ctlAlarmClock
eklemek için ctlAlarmClock öğesine çift tıklayın.Araç Kutusu'nda DateTimePicker'ı bulup çift tıklayarak formunuza denetim DateTimePicker ekleyin ve ardından Etiket'e çift tıklayarak bir Label denetim ekleyin.
Denetimleri formda uygun bir yere yerleştirmek için fareyi kullanın.
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 Tasarımcıda dtpTest'e çift tıklayın.
Kod Düzenleyicisi olarak
private void dtpTest_ValueChanged
açılır.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(); }
Çözüm Gezgini'da Test'e sağ tıklayın ve ardından Başlangıç Projesi Olarak Ayarla'ya tıklayın.
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.DateTimePicker Saat dakikalarının görüntülendiği yere tıklayın.
Klavyeyi kullanarak dakikalar için tarafından gösterilen
ctlAlarmClock
geçerli saatten bir dakika daha büyük bir değer ayarlayın.Alarm ayarının zamanı içinde
lblTest
gö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.öğesine tıklayarak
btnAlarmOff
alarmı 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.
.NET Desktop feedback