C# ile Progress Bar Kontrolünün Kullanimi

Uygulamalarimizda yaptigimiz bir islemin ne kadarinin tamamlandigini göstermek için .NET kontrollerinde olan progressbar kontrolünü kullaniyoruz.  Progress bar kullanmanin birkaç farkli yöntemi var. Islem yapilan kod blogu içerisinde Application.DoEvent fonksiyonunu kullanarak progress bar degerini degistirebilecegimiz gibi bir timer içinde de o anki durumu göre progress barin degerini degistirebiliriz. Iki yöntemle de basit örnekler vermeye çalisacagim.

ProgressBar kontrolünün bilmemiz gereken 3 adet özelligi vardir bunlar: Minimum,Maximum ve Value özellikleridir.

Örnek 1:

.
Ilk olarak bir window projesi açalim ve asagidaki ekrandaki gibi formu düzenleyelim. Bu örnegimizde baslangiç ve bitis araligi verilen sayilarin arasinda kalan tüm sayilari toplayarak sonucu ekranda gösterecegiz. Toplama islemi sirasinda ise islemin yüzde kaçinin tamamlandigini Progressbarda gösterecegiz.

Form bilesenlerini asagidaki gibi yerlestirdik. Butona basinca baslangiç degerinden bitis degerine kadar olan tüm sayilari toplayip sonuç kisminda gösterecegiz. Bu esnada islemin yüzde kaçinin tamamlandigini progress barda gösterecegiz.

Progress Bar için baslangiç degerini 0 bitil degerinide 100 olarak belirliyoruz. (minimum,maximum). Çünkü islem durumunu yüzde olarak gösterecegimiz için her % 1 lik  dilime bir deger gelecek sekilde ayarlamamiz lazim. Ayrica progress barin step özelligini 1 olara ayarliyoruz.

progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Step = 1;

Butona bastigimiz zaman islem bitmeden yeniden basilamasin diye butonun bulundugu groupbox’i disable ediyoruz, progress barin degerini resetliyoruz ve sayilari toplamak için gerekli fonksiyonumuzu çagiriyoruz. Daha sonra groupbox’i yeniden enable yapiyoruz.

progressBar1.Value = 0;
groupBox1.Enabled = false;
SayilariTopla1();
groupBox1.Enabled = true;

.

Sayilari topladigimiz fonksiyon basit bir toplama islemi aslinda. Baslangiç degerinden bitis degerine kadar bir döngü kurup sayilari ardi ardina topluyoruz. Her toplama isleminde sürecin durumunu progress barda göstermek için value özelligini kullaniyoruz.

private void SayilariTopla1()
{
    long toplam = 0;
    int bas = Convert.ToInt32(basUD.Value);
    int bit = Convert.ToInt32(bitUD.Value);
    if (bas >= bit)
    {
        MessageBox.Show("Baslangiç Sayisi bitisten 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();
}

Yukarida dikkat ederseniz döngünün her adiminda Application.DoEvents() kullandik bu sayede form üzerinde bulunan kontrollerdeki degisiklikleri göre biliriz. Aksi halde döngü bitene kadar formda bir degisiklik görülmez. Islem bittikten sonra progress bar bir anda dolar ya da büyük parçalar halinde dolar.

Uygulamayi çalistirip butona bastigimizda çalisma sürecinde asagidaki gibi bir görüntü elde ederiz. Kaynak kodlari sayfa sonundaki linkten indirebilirsiniz.

Örnek 2

Progress bar kontrolünü bir timer ile kullanacagimiz basit bir örnek yapalim. Ilk olarak formumuza iki adet progress bar ve 2 adet timer ekleyelim.

Form loadda timer ve progress bar bilesenlerimizin özelliklerini ayarlayalim.

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 çalistiginda zaman progress barin degerini bir arttirmak ve max degere ulastiginda timeri durdurmak için timerlarin tick eventlarina asagidaki kodlari yazalim.

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;
}

Örnegimizde ekledigimiz progress barlarin farkli hizlarda doldugunu görürsünüz.

Örnek  kaynak kodlar (iki örnekte tek proje altindadir)

.

Tags:

3 thoughts on “C# ile Progress Bar Kontrolünün Kullanimi

  • klavyeden bir dizi boyutu girin.Daha sonra dizi boyutu kadar ondalikli sayiyi bu dizi içerisine ekleyin.Diziye eklenen bu sayilarin toplamini ,aritmetik ortalamasini,en büyük ve en küçük degerini ekrana yazdiran programi yazininiz.<<< bu programin cevabini Lütfen acele yazarmisinz . . . ( Lütfen çook acil .(

  • güzelmis 🙂

  • 2. örnek daha basit. 

    ama bir eksigi var. 

    butona gelecek kodlari yazmamissin. Timer i çalismak için gerekli kodlari

     

    private void btnBaslat_Click(object sender, EventArgs e)

            {

                timer1.Enabled = true;

                timer2.Enabled = true;

            }

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir