Üye Kayıt Üye Giriş

C# ile Progress Bar Kontrolünün Kullanımı


C# ile Progress Bar Kontrolünün Kullanımı

 

Uygulamalarımızda yaptığımız bir işlemin ne kadarının tamamlandığını göstermek için .NET kontrollerinde olan progressbar kontrolünü kullanıyoruz.  Progress bar kullanmanın birkaç farklı yöntemi var. İşlem yapılan kod bloğu içerisinde Application.DoEvent fonksiyonunu kullanarak progress bar değerini değiştirebileceğimiz gibi bir timer içinde de o anki durumu göre progress barın değerini değiştirebiliriz. İki yöntemle de basit örnekler vermeye çalışacağım.

ProgressBar kontrolünün bilmemiz gereken 3 adet özelliği vardır bunlar: Minimum,Maximum ve Value özellikleridir.

 

Örnek 1:

İlk olarak bir window projesi açalım ve aşağıdaki ekrandaki gibi formu düzenleyelim. Bu örneğimizde başlangıç ve bitiş aralığı verilen sayıların arasında kalan tüm sayıları toplayarak sonucu ekranda göstereceğiz. Toplama işlemi sırasında ise işlemin yüzde kaçının tamamlandığını Progressbarda göstereceğiz.

 

Form bileşenlerini aşağıdaki gibi yerleştirdik. Butona basınca başlangıç değerinden bitiş değerine kadar olan tüm sayıları toplayıp sonuç kısmında göstereceğiz. Bu esnada işlemin yüzde kaçının tamamlandığını progress barda göstereceğiz.

c# progress bar

 

Progress Bar için başlangıç değerini 0 bitil değerinide 100 olarak belirliyoruz. (minimum,maximum). Çünkü işlem durumunu yüzde olarak göstereceğimiz için her % 1 lik  dilime bir değer gelecek şekilde ayarlamamız lazım. Ayrıca progress barın step özelliğini 1 olara ayarlıyoruz.

progressBar1.Minimum = 0;

progressBar1.Maximum = 100;

progressBar1.Step = 1;

 

Butona bastığımız zaman işlem bitmeden yeniden basılamasın diye butonun bulunduğu groupbox’ı disable ediyoruz, progress barın değerini resetliyoruz ve sayıları toplamak için gerekli fonksiyonumuzu çağırıyoruz. Daha sonra groupbox’ı yeniden enable yapıyoruz.

progressBar1.Value = 0;

groupBox1.Enabled = false;

SayilariTopla1();

groupBox1.Enabled = true;

 

 

Sayıları topladığımız fonksiyon basit bir toplama işlemi aslında. Başlangıç değerinden bitiş değerine kadar bir döngü kurup sayıları ardı ardına topluyoruz. Her toplama işleminde sürecin durumunu progress barda göstermek için value özelliğini kullanıyoruz.

private void SayilariTopla1()

{

    long toplam = 0;

    int bas = Convert.ToInt32(basUD.Value);

    int bit = Convert.ToInt32(bitUD.Value);

    if (bas >= bit)

    {

        MessageBox.Show("Başlangıç Sayısı bitişten Büyük Olamaz");

 

        return;

    }

    int fark = bit - bas;

 

    for (int i = bas; i < bit + 1; i++)

    {

        toplam = toplam + i;       

        decimal tamamlanmaYuzdesi = ((decimal)(i - bas) / (decimal)fark) * 100;

        Application.DoEvents();

        progressBar1.Value = (int)tamamlanmaYuzdesi;

        sonucLbl.Text = toplam.ToString();

 

    }

    sonucLbl.Text = toplam.ToString();

}

 

Yukarıda dikkat ederseniz döngünün her adımında Application.DoEvents() kullandık bu sayede form üzerinde bulunan kontrollerdeki değişiklikleri göre biliriz. Aksi halde döngü bitene kadar formda bir değişiklik görülmez. İşlem bittikten sonra progress bar bir anda dolar ya da büyük parçalar halinde dolar.

Uygulamayı çalıştırıp butona bastığımızda çalışma sürecinde aşağıdaki gibi bir görüntü elde ederiz. Kaynak kodları sayfa sonundaki linkten indirebilirsiniz.

c# progress bar

 

Örnek 2

Progress bar kontrolünü bir timer ile kullanacağımız basit bir örnek yapalım. İlk olarak formumuza iki adet progress bar ve 2 adet timer ekleyelim.

Form loadda timer ve progress bar bileşenlerimizin özelliklerini ayarlayalım.

progressBar1.Minimum = 0;

progressBar1.Maximum = 100;

progressBar1.Step = 1;

 

progressBar2.Minimum = 0;

progressBar2.Maximum = 800;

progressBar2.Step = 1;

 

timer1.Interval = 400; //0.5 saniye

timer2.Interval = 100; //0.1 saniye

 

Timer her çalıştığında zaman progress barın değerini bir arttırmak ve max değere ulaştığında timeri durdurmak için timerların tick eventlarına aşağıdaki kodları yazalım.

private void timer1_Tick(object sender, EventArgs e)

{

    if (progressBar1.Value == progressBar1.Maximum)

    {

        timer1.Enabled = false;

        return;

    }

 

    progressBar1.Value += 1;

 

}

private void timer2_Tick(object sender, EventArgs e)

{

    if (progressBar2.Value == progressBar2.Maximum)

    {

        timer2.Enabled = false;

        return;

    }

    progressBar2.Value += 1;

}

 

c# progress bar

 

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER