İ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
Visual Studio, yeni bir Windows Forms denetim kitaplığı projesi oluşturun ve bunu ctlClockLib olarak adlandırın.
Proje adı,
ctlClockLibVarsayı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çeriyorsactlClock,ctlClockbileşenini kullanarakctlClockLib.ctlClock.Çö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.
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
Çö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.
Araç kutusunda ortak denetimler düğümünü genişletin ve ardından etiket' e çift tıklayın.
Label
label1Tasarımcı yüzeyinde denetimciyle adlandırılmış bir denetim eklenir.Tasarımcıda Label1' ye tıklayın. Özellikler penceresi, aşağıdaki özellikleri ayarlayın.
Özellik Şununla değiştirin Ad lblDisplayMetin (blank space)TextAlign MiddleCenterYazı tipi. boyutu 14Araç 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.
Bileşen tasarımcısında, Süreölçer1' a tıklayın ve ardından Interval özelliğini
1000ve Enabled özelliğini olarak ayarlayıntrue.IntervalÖzelliği bileşeni işaret eden sıklığı denetler Timer . Her zaman
timer1Tick,timer1_Tickolaydaki kodu çalıştırır. Aralık, zaman işaretleri arasındaki milisaniye sayısını temsil eder.Bileşen tasarımcısında, için Süreölçer1 öğesine çift tıklayarak
timer1_Tickiçin olayına gidinctlClock.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
privateolunprotected.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ığıtimer1olarak ayarlandığı için1000Bu olay her bin milisaniyede bir gerçekleşeceğinden, bu nedenle her saniye geçerli saati güncelliyor.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)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
Çö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.
İ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.
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
ClockForeColorveClockBackColorBu denetimin sonraki kullanıcıları tarafından kullanılabilir.getVe deyimleri, özelliksetdeğerinin depolanmasını ve alınmasını, ayrıca özelliğine uygun işlevselliği uygulamak için de kod sağlar.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
Projeyi derlemek için F5 tuşuna basın ve denetimi UserControl Test kapsayıcısında çalıştırın.
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.Tıklayarak bir renk seçin.
Denetiminizin arka plan rengi, seçtiğiniz renge değişir.
Ö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
Çö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.
Devralınan Kullanıcı denetimi şablonunu seçin.
Ad kutusuna yazın
ctlAlarmClock.csve ardından Ekle' ye tıklayın.Devralma Seçicisi iletişim kutusu görüntülenir.
Bileşen adı altında ctlClock' ye çift tıklayın.
Çö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
Çözüm Gezgini' de, ctlAlarmClock' a sağ tıklayın ve ardından kodu görüntüle' ye tıklayın.
İfadesini bulun
public class. Denetiminizin öğesinden devraldığını unutmayınctlClockLib.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
Çö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ı
ctlAlarmClockana pencerede açılır.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
lblDisplayve Özellikler penceresi değiştirilemeyeceğini veya erişilmeyeceğini gösterir. Varsayılan olarak, bileşik denetimde bulunan denetimlerprivateve ö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
publicprotected. Bu, uygun kodu kullanarak bileşik denetilinizin içindeki denetimlerin özelliklerini ayarlamanıza ve değiştirmenize izin verir.LabelBileşik denetimi bir denetim ekleyin.
Fareyi kullanarak Label denetimi, ekran kutusunun hemen altına sürükleyin. Özellikler penceresi, aşağıdaki özellikleri ayarlayın.
Özellik Ayar Ad lblAlarmMetin Alarm! TextAlign MiddleCenterGö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
Kod düzenleyicisinde,
private bool blnAlarmSet;ifadesini bulun. Hemen hemen altına aşağıdaki ifadeyi ekleyin.private bool blnColorTicker;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
Çö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.
Denetime düğme ekleyin. Düğmenin özelliklerini aşağıdaki gibi ayarlayın.
Özellik Değer Ad btnAlarmOffMetin Alarmı devre dışı bırak Tasarımcı 'da, btnAlarmOff' a çift tıklayın.
Kod Düzenleyicisi
private void btnAlarmOff_Clicksatıra açılır.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; }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
Çözüm Gezgini' de, ctlClockLib' a sağ tıklayın ve ardından Oluştur' a tıklayın.
çözüme yeni bir Windows Forms uygulama projesi ekleyin ve Test edin.
Çö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.Çözüm Gezgini' de Test' e sağ tıklayın ve ardından Oluştur' a tıklayın.
Araç kutusunda ctlClockLib Components düğümünü genişletin.
Formunuza bir kopyasını eklemek için ctlAlarmClock öğesine çift tıklayın
ctlAlarmClock.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.
Denetimleri form üzerinde uygun bir yerde konumlandırmak için fareyi kullanın.
Bu denetimlerin özelliklerini aşağıdaki şekilde ayarlayın.
Denetim Özellik Değer label1Metin (blank space)Ad lblTestdateTimePicker1Ad dtpTestBiçimlendir Time Tasarımcıda dtpTest öğesine çift tıklayın.
Kod Düzenleyicisi olarak açılır
private void dtpTest_ValueChanged.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(); }Çözüm Gezgini' de Test' e sağ tıklayın ve ardından Başlangıç Project 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. Denetimde geçerli saatin güncelleştirildiğini
ctlAlarmClockve başlangıç saatinin denetimde gösterildiğini unutmayın DateTimePicker .DateTimePickerSaatin dakikalarının görüntülendiği yere tıklayın.
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,lblAlarmFlash olur.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.