2012-02-25 26 views
1

我在這裏有一種情況。我有一個Windows窗體中的圖片框,我讓用戶通過使用openfileupload控件瀏覽圖片,之後,我將選定的圖片設置爲圖片框。這裏是我的代碼:上傳圖片時顯示ProgressBar(Windows Form C#)

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

}

,但我不知道如何適應這個代碼到我的類,以便它會在平均時間顯示進度條的圖片被上傳時! 有什麼想法?

+0

你的問題還不清楚。 「上傳」意味着什麼?我瞭解上傳的行爲是通過電報發送到遠程位置的行爲。你的意思是'將圖像加載到圖片框'? – Steve 2012-02-25 16:50:36

+1

需要多長時間才能在PictureBox中顯示圖像?我很驚訝,甚至需要一個進度條。 – SuperOli 2012-02-25 16:56:24

+0

@Steve是的,我絕對的意思是將圖像加載到圖片框中。 – Azeem 2012-02-25 17:37:04

回答

0

如果確實需要很長時間才能「上傳」,則可以使用FileSystemWatcher的更改event。每次啓動時,都會將進度條增加到已知文件總大小的一小部分。

0

我有一箇舊的代碼適合回答你的問題。
爲了清楚起見,我讓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

當我添加此代碼並運行該項目時,什麼也沒有發生! ! 甚至不會出現GUI。 加上它給我調用方法LoadAsynch(Chosen_File)的語法錯誤; – Azeem 2012-02-25 18:26:54

+0

對不起,手動輸入。從LoadAsync中刪除'h'。對於GUI,我不知道。你是從一個Main方法開始你的項目並調用這個form1嗎?另外,我的示例中的名稱空間與您的第二個示例不同。另外我沒有發佈designer.cs。假設你有它。 – Steve 2012-02-25 18:45:39

+0

我注意到當我註釋掉下面的行時,GUI運行,否則不行! CreateProgressBar(); 這種方法似乎有一些問題...沒有主要的方法,我可以看到,它的Windows窗體,我用Ctrl + F5運行它! – Azeem 2012-02-25 19:53:20