C# da Progress Bar Düzeni Değiştirme

alpayguzbey

Hectopat
Katılım
27 Nisan 2015
Mesajlar
341
Çözümler
1
Yer
Afyonkarahisar
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
Ekteki resmi internetten buldum. Bu progress bar gibi Yükleme çubuğunun sürekli gidip gelmesini nasıl sağlarım. Nette araştırdım çözümünü bulamadım. Sadece bu resmi bulabildim.

1533173_894267703949895_1104975845_n.jpg
 
Son düzenleyen: Moderatör:
Teşekkür ederim oldu. Birde bunu kodlarla değiştirmem lazım. Kodunu paylaşabilirnisiniz? Son olarak program çalışırken onun valuesine göre simgede de yeşil bir hareketlilik oluyorya idm den dosya indirirken mesela. Onuda yapmamız mümkün mü ?

@MF Bir bilginiz var mıdır?

Cevap gelmeyecek sanırım konuyu kilitleyelim.
 
Formunuza birer tane button, Progressbar ve label ekleyin. Kod bariz şekilde hızlı çalışacağından frenlemek için Thread.Sleep() metodunu kullandım. Daha uzun bir işlem yapılmasında mesela 5 milyona kadar olan asal sayıları bulan program gibi Thread.Sleep()'e gerek kalmayabilir.

Kod:
        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Style = ProgressBarStyle.Blocks;
            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;
            label1.Text = "";
            int ustSinir = 200;
            for (int i = 1; i <= ustSinir; i++)
            {
                //50 milisaniye hiç bir şey yapmadan bekle
                Thread.Sleep(50);
                double isinYuzdeKaciBitti = (double)i * progressBar1.Maximum / ustSinir;
                progressBar1.Value = Convert.ToInt32(isinYuzdeKaciBitti);
            }
            label1.Text = "İşlem tamamlandı";
        }
 
Son düzenleme:
Benim istediğim bu değildi. Bunu zaten çok önceden yapmıştım. Ben
progressBar1.Style = ProgressBarStyle.Marquee;
bunu aramıştım. Kod ile marquee yi. Birde
Ekran Alıntısı.JPG

bunu nasıl yaparım. Progress Bar ın değerini simgeye aktarmak.
 
En son mesajınızdaki resmi paylaşana kadar görev çubuğunda bir işlemin ilerleyişini göstermek istediğinizi anlamamıştım. Bir dahaki sefere daha açık izah ederek sorarsanız iyi olur. Her zaman ne sorulduğunu anlayamayabiliyoruz. Programı WPF'de yazdım. Windows Forms'da da yapılabilmesi mümkündür belki ama emin değilim.

XAML Tasarım Kodu
Kod:
<Window x:Class="TaskBardaIlerlemeGosterme.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">


    <Window.TaskbarItemInfo>
        <TaskbarItemInfo/>
    </Window.TaskbarItemInfo>


    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
         
        <Button x:Name="btnIslemiBaslat" Grid.Row="0" Grid.Column="1" Margin="5" Content="İşlemi Başlat" Click="btnIslemiBaslat_Click"/>
        <ProgressBar x:Name="progressBar1" Grid.Row="1" Grid.ColumnSpan="3" Height="30" Margin="5" Minimum="0" Maximum="100"/>
        <Label x:Name="label1" Grid.Row="2" Grid.Column="1"/>
    </Grid>
</Window>

C# Kodu
Kod:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace TaskBardaIlerlemeGosterme
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Normal;               
        }

        /*Yapılan işlem bilgilerinin progressbar ve görev çubuğundaki ilerlemeye aktarılması için asenkron metod kullandık.
          Eğer asenkron metod kullanmazsak değişiklikler progressbar kontrolüne ve görev çubuğundaki ilerlemeye yansıtılamıyor*/
        private Task<double> IsinNeKadariBittiHesapla(int i, int ustSinir, double progressBarMaximum)
        {
            return Task.Run(() =>
                 {
                     return (double)i * progressBarMaximum / ustSinir;
                 });
        }

        private async void btnIslemiBaslat_Click(object sender, RoutedEventArgs e)
        {     
            label1.Content = "";
            int ustSinir = 200;
     
            for (int i = 0; i <= ustSinir; i++)
            {
                progressBar1.Value = await IsinNeKadariBittiHesapla(i, ustSinir, progressBar1.Maximum);
                TaskbarItemInfo.ProgressValue = progressBar1.Value/progressBar1.Maximum;
                Thread.Sleep(25);
            }
            label1.Content = "İşlem tamamlandı.";
     
        }  

    }
}
 
Yardımınız için teşekkür ederim. Ayrıca yeni bir şey buldum. Devexpress ile "progressbarcontrol" u kullanarak propertiesten showintaskbar özelliğini true yaparsak progressbar'ın valuesi taskbar'a aktarılıyor. Bu yol daha kolay bazıları için. Paylaşmak istedim. Konu kilitlenebilir. Çözüldü.
 
Uyarı! Bu konu 9 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı