Показывать ProgressBar при загрузке изображения (Windows Form C #) - PullRequest
1 голос
/ 25 февраля 2012

У меня здесь ситуация. У меня есть окно рисунка в форме окна, и я позволяю пользователю просматривать изображение с помощью элемента управления openfileupload, и после этого я устанавливаю выбранное изображение в окно рисунка. Вот мой код:

namespace Employee_Card_Manager
{
public partial class Form1 : Form
{
    string Chosen_File = "";

    public Form1()
    {
        InitializeComponent();
    }

    private void label1_Click(object sender, EventArgs e)
    {

    }

    private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        selectpic.Title = "Browse Employee Picture!";
        selectpic.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        selectpic.FileName = "";
        selectpic.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp";

        if (selectpic.ShowDialog() != DialogResult.Cancel)
        {
            progressBar1.Enabled = true;
            Chosen_File = selectpic.FileName;
            pictureBox1.Image = Image.FromFile(Chosen_File);
            progressBar1.Enabled = false;
        }
    }
}

}

Работает отлично! Мне нужно добавить некоторые изменения в этот код, чтобы, когда пользователь просматривал изображение и нажимал кнопку «Открыть», мое приложение показывало ему индикатор выполнения, показывающий, что это изображение загружается в это время ... Я нашел следующий код для отображения индикатора выполнения:

namespace ProgressBarSampleCSharp
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void CreateButton_Click(object sender, EventArgs e)
    {
        ProgressBar pBar = new ProgressBar();
        pBar.Location = new System.Drawing.Point(20, 20);
        pBar.Name = "progressBar1";
        pBar.Width = 200;
        pBar.Height = 30;

        //pBar.Dock = DockStyle.Bottom;

        pBar.Minimum = 0;
        pBar.Maximum = 100;
        pBar.Value = 70;

        Controls.Add(pBar);
    }
}

}

Но я понятия не имею, как встроить этот код в мой класс, чтобы он отображал индикатор выполнения в то время, когда загружается картинка! есть идеи ??

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

У меня есть старый код, адаптированный для ответа на ваш вопрос.
Я выпустил элемент управления ProgressBar из InitializeComponent просто для ясности.
Однако я думаю, что когда вы запустите этот код, вы удалите прогрессбар полностью.

namespace Employee_Card_Manager 
{ 
    public partial class Form1 : Form 
    { 
        ProgressBar pBar = new ProgressBar(); 
        string Chosen_File = ""; 

        public Form1() 
        { 
            InitializeComponent(); 
            CreateProgressBar();
        } 
        private void CreateProgressBar() 
        { 
            pBar.Location = new System.Drawing.Point(20, 20); 
            pBar.Name = "progressBar1"; 
            pBar.Width = 200; 
            pBar.Height = 30; 
            pBar.BackColor = Color.Transparent;
            pBar.Minimum = 0; 
            pBar.Maximum = 100; 
            pBar.Value = 0; 
            Controls.Add(pBar); 
        } 

        private void button1_Click(object sender, EventArgs e) 
        { 
            selectpic.Title = "Browse Employee Picture!"; 
            selectpic.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
            selectpic.FileName = ""; 
            selectpic.Filter = "JPEG Images|*.jpg|GIF Images|*.gif|BITMAPS|*.bmp"; 

            if (selectpic.ShowDialog() != DialogResult.Cancel) 
            { 
                Chosen_File = selectpic.FileName; 
                pictureBox1.LoadCompleted += new AsyncCompletedEventHandler(pictureBox1_LoadCompleted);
                pictureBox1.LoadProgressChanged += new ProgressChangedEventHandler(pictureBox1_LoadProgressChanged);
                pictureBox1.WaitOnLoad = false;
                pictureBox1.LoadAsynch(Chosen_file);
            } 
        } 

        private void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e)
        {
            pBar.Value = 0;
        }

        private void pictureBox1_LoadProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            pBar.Value = e.ProgressPercentage;
        }    
    }
} 
0 голосов
/ 25 февраля 2012

Если «загрузка» действительно занимает много времени, вы можете использовать измененное событие FileSystemWatcher.Каждый раз, когда он запускается, вы увеличиваете индикатор выполнения на некоторую долю от общего известного размера файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...