Makale Özeti

Bu makalemde HelpProvider ve ErrorProvider kontrolleri ve kullanımları hakkında bilgiler vereceğim.

Makale

    Windows uygulamalarımıza yardım özelliği eklemek için HelpProvider kontrolünü kullanabiliriz. HelpProvider kontrolü ile formumuzdaki herhangi bir kontrole tıklandığında veya focus'un ilgili kontrolde olduğu zaman F1 tuşuna basıldığında bir yardım balonu çıkarabilir, hazır bir help dosyasını (örneğin bir .chm dosyasını) açabilir veya kullanıcıyı online yardım alması için bir internet sitesine yönlendirebiliriz. HelpProvider kontrolünün önemli property ve metodları aşağıda listelenmiştir:

Property
HelpNamespace HelpProvider kontrolüne görüntülemesi için belirtilen dosya ya da internet adresinin tutulduğu property'dir. HelpProvider kontrolünün HelpNamespace property'si atanmazsa SetHelpString metodu kullanılarak ilgili kontrole ait olmak üzere bir yardım yazısı belirlenebilir. Eğer HelpProvider kontrolünün hem HelpNamespace metoduna değer atanmış hem de SetHelpString metodu kullanılmışsa HelpNamespace property'sinde belirlenmiş olan yardım bilgisi öncelikli olarak gösterilir.
Metod
GetHelpKeyword HelpProvider tarafından açılacak olan yardım dosyalarının belirli bir konuya göre açılmasını istersek HelpKeyword property'sini set ederiz. GetHelpKeyword metodu da belirli bir kontrolü parametre alarak bu kontrol için set edilmiş bu property'nin değerini döndürür.
GetHelpNavigator HelpNavigator property'si açılacak olan yardım dosyasında yardım konularının nasıl listeleneceğinin belirlendiği property'dir. GetHelpNavigator metodu ile HelpNavigator property'sine atanmış olan HelpNavigator tipinden değeri alabiliriz.
GetHelpString Parametre olarak geçirilen kontrole atanmış olan tooltip şeklinde yardım yazısının elde edildiği metoddur.
GetShowHelp Parametre olarak geçirilen kontrol için yardım bilgisi gösterilip gösterilmeyeceğinin elde edildiği metoddur.
SetHelpKeyword HelpProvider tarafından parametre olarak geçirilen kontrolün yardım dosyalarının belirtilen string tipinde değişken olan keyword'e göre açılmasını sağlar.
SetHelpNavigator Parametre olarak Control ve HelpNavigator nesnesini alan bu metod açılacak olan yardım dosyasının hangi anahtar kelimelerle ve nasıl açılacağını belirlemeye yarar. Parametre olarak geçirilen HelpNavigator nesnesinin enum'larının açıklamaları aşağıdaki gibidir:
AssociateIndex - İlgili HelpProvider kontrolünün HelpKeyword property'sinde belirlenmiş olan konunun ilk harfi ile başlayan konuları help dosyasındaki index tabında listeler.
Find - Açılan help dosyasında Search tab'ının seçili olmasını sağlar.
Index - Açılan help dosyasının index tab'ı seçili olarak açılmasını sağlar.
KeywordIndex - İlgili HelpProvider kontrolünün HelpKeyword property'sinde belirlenmiş olan konuyu help dosyasının index tab'ında seçili halde görüntüler.
TableOfContents - Açılan help dosyasının Contents tab'ını seçili olarak açar.
Topic - Help dosyası içinde compile edilmiş herhangi bir html dosyasının açılmasını sağlar.
TopicId - Help dosyasındaki belirli bir topic'in Id'si ile açılmasını sağlar.
SetHelpString Kullanıcının parametre geçirilen kontrolün yardım bilgisinin bir pop-up mesajda gösterilmesi için set edilen metoddur.
SetShowHelp Parametre olarak geçirilen kontrol için yardım bilgisi gösterilip gösterilmeyeceğinin belirlendiği metoddur.

    Şimdi örnek bir uygulamada HelpProvider nesnesinin yukarıda belirtilen öğelerinin kullanımını inceleyelim. Yeni bir Windows uygulaması oluşturalım ve formu aşağıdaki gibi dizayn edelim:



    Resimde görüldüğü gibi formun kapatma düğmesinin sol tarafında ? şeklinde bir buton bulunuyor. Bu buton form üstündeki kontrollere ait yardımların görüntülenmesini sağlayan HelpButton'dur. HelpButton'un form üstünde yeralabilmesi için formun değiştirilmesi gereken üç property'si vardır. İlk olarak formun HelpButton property'sini true, ardından da MinimizeBox ve MaximizeBox property'lerini de false olarak değiştirdiğinizde formda HelpButton görüntülenecektir. Bu property'ler değiştirilmezse formda HelpButton görüntülenmez. Forma iki tane HelpProvider kontrolü ekledikten sonra formun Load'ına aşağıdaki kodu yazalım:

 

private void frmHelpProvider_Load(object sender, EventArgs e)
{
    helpProvider1.HelpNamespace = "http://www.google.com";
    helpProvider2.HelpNamespace = @"C:\WINDOWS\Help\regedit.chm";

    helpProvider1.SetHelpString(txtAd, "Adinizi giriniz.");
    helpProvider2.SetHelpNavigator(lblHelpDosyasiniAc, HelpNavigator.TableOfContents);
}

    Kodda ilk HelpProvider kontrolünün HelpNamespace property'sine internet sitesi adresi, ikinci kontrolün property'sine de Registry Editor'ün help dosyasının path'ini atadık. Ardından formdaki Ad textbox'ının HelpString property'sini set ettik. Böylece kullanıcı formdaki HelpButton'a tıklayıp ardından da Ad textbox'ına tıklayınca balon şeklinde mesaj HelpString property'sinde set edilen mesaj olarak görüntülenecektir. Bunun ardından helpProvider2 kontrolünün SetHelpNavigator metodunu kullanarak Registry Editor'ün help dosyasının lblHelpDosyasiniAc'a tıklandıktan sonra açılacağını ve açılan .chm dosyasında Contents tab'ının seçili olarak açılmasını set ettik. Uygulamayı derleyip çalıştırdığımızda formdaki HelpButton'a tıklayıp textbox'a tıkladığımızda "Adınızı giriniz" şeklinde bir bilgi balonu çıkacaktır. HelpButton'a tıklayıp ardından da Help Dosyasını Aç yazan label'a tıkladığımızda .chm dosyası aşağıdaki şekilde açılacaktır:



    Açılan bu help dosyasının Index tabının seçili gelmesi ve arama kutusunda belirli bir keyword'e göre konuların sıralı gelmesi için SetHelpNavigator metodunu aşağıdaki şekilde değiştirip, bir satır daha kod ekliyoruz:

 
...
helpProvider2.SetHelpNavigator(lblHelpDosyasiniAc, HelpNavigator.Index);
helpProvider2.SetHelpKeyword(lblHelpDosyasiniAc, "keys");
...

    Kodu derleyip çalıştırdığımızda help dosyası artık aşağıdaki şekilde açılacaktır:



    Makalemde bahsedeceğim bir diğer kontrol olan ErrorProvider ise kullanıcı veri girişinin validasyonlarının yapılmasını ve geçersiz/hatalı giriş yapıldığında kullanıcıya hata ile ilgili uyarı verilmesini sağlar. Bu kontrolün belli başlı property ve metodları aşağıdaki gibidir:
 

Property
BlinkRate Milisaniye tipinde hata ikonunun ne kadar hızda yanıp söneceğinin set edildiği property'dir.
BlinkStyle Hata ikonunun ne zaman yanıp söneceğinin set edildiği property'dir.
Icon Hata oluştuğu anda ilgili kontrolün yanında belirecek olan ikonun set edildiği property'dir.
Metod
GetError İlgili kontrol için set edilmiş olan hata mesajını döndürür.
SetError Bir kontrol için hata mesajı set edilmesini sağlar.
SetIconAlignment Hata anında belirecek olan ikonun kontrolün hangi tarafında görüntüleneceğinin set edildiği metoddur.
SetIconPadding İkon ile kontrol arasında ne kadar mesafe bulunacağının set edildiği metoddur.

    Şimdi yeni bir Windows formunda ErrorProvider kontrolü ile ilgili bir örnek yapalım. Formu aşağıdaki gibi dizayn edip bir de ErrorProvider kontrolü ekleyelim.



    Örnekte kullanıcı Adınız alanını boş geçtiğinde ve/veya Yaşınız alanına nümerik bir değer girmediğinde ErrorProvider kontrolü hata mesajı gösterecek. İlk olarak formun Load event'inde forma eklemiş olduğumuz ErrorProvider kontrolünün bazı property'lerini set edelim:

private void frmErrorProvider_Load(object sender, EventArgs e)
{
    errorProvider1.BlinkRate = 100;
    errorProvider1.BlinkStyle = ErrorBlinkStyle.AlwaysBlink;
    Icon
icn = new Icon("1.ico");
    errorProvider1.Icon = icn;
}

    ErrorProvider'ın yanıp sönme hızını 100 milisaniye, yanıp sönme şeklini AlwaysBlink olarak set ettik ve bir ikon dosyasını atadık. Şimdi txtAd kontrolünün Validating event'inde ErrorProvider'ın SetError metodunu kullanarak textbox boş bırakıldığında gösterilecek olan hata mesajını belirliyoruz:
 
private void txtAd_Validating(object sender, CancelEventArgs e)
{
    if
(txtAd.Text == "")
    {
        errorProvider1.SetError(txtAd, "Ad boş bırakılamaz.");
    }
   
else
   
{
        errorProvider1.SetError(txtAd, "");
    }
}

    Şimdi de txtYas textbox'ının Validating event'inde textbox'a girilen değerin nümerik olmadığı zaman görüntülenecek olan hata mesajını set edelim:

private void txtYas_Validating(object sender, CancelEventArgs e)
{
    for
(int i = 0; i < txtYas.Text.Length; i++)
    {
        if
(!char.IsNumber(txtYas.Text, i))
        {
            errorProvider1.SetError(txtYas, "Yaş alanına nümerik değer giriniz.");
        }
       
else
       
{
            errorProvider1.SetError(txtYas, "");
        }
    }
}

    Son olarak formdaki butonun click event'inde ValidateChildren metodunu çağıralım:
 
private void btnGonder_Click(object sender, EventArgs e)
{
    this
.ValidateChildren();
}



    Uygulamayı çalıştırıp Adınız textbox'ını boş bıraktığımızda veya Yaşınız textbox'ına nümerik bir değer girmediğimizde kontrollerin yanlarındaki ikonlar yanıp sönmeye başlayacaklardır. İkonların üstüne fareyle geldiğimizde ise hata mesajı görüntülenecektir.

    Bu makalemde HelpProvider ve ErrorProvider kontrolleri hakkında bilgi vermeye çalıştım. Uygulamalarımızda kullanıcılara yardım sağlamak ve kullanıcı girişi validasyon işlemleri için bu iki kontrolü kolay bir biçimde kullanabiliriz.

    Işıl Orhanel


Örnek Kod