2011-08-07 6 views
0

画像を追加するときにファイルを開くダイアログボックスとフォルダの参照ダイアログボックスを使用し、画像リストをリストボックスに追加しようとしています。それがロードされるすべてのイメージvb.netを使用して画像リストをリストボックスに読み込む際にプログレスバーを追加する

私はそれを取得しようとしていますが、進行状況バーの値が何かを約25 0r 40と言っているときはその時点で停止していますが、100%が完了するまで進捗バーを表示し、 。

どうすればよいですか?

Private Sub AddImages_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddImages.Click 

    If Not Directory.Exists(Application.StartupPath + "\Backup\") = True Then 
     Directory.CreateDirectory(Application.StartupPath + "\Backup\") 
    End If 



    OpenFileDialog1.FileName = "Select a Image" 
    OpenFileDialog1.Multiselect = True 
    OpenFileDialog1.InitialDirectory = "C:\Users\Public\Pictures\Sample Pictures" 
    OpenFileDialog1.Filter = "All Type Of Image Files|*.*|Joint Photographic Experts Group [JPEG]|*.jpg|Bitmap [BMP|*.bmp|Tagged Image File Format [TIFF]|*.tiff|Portable Network Graphics [PNG]|*.png" 
    If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then 

     ProgressBar2.Show() 
     ProgressBar2.Step = 10 
     Dim str As String 
     For Each str In OpenFileDialog1.FileNames 
      Load.Text = "Loading..." 

      Dim fso As New FileSystemObject 
      Dim MyName As String 
      Dim MyExtension As String 

      MyName = fso.GetFileName(CStr(str)) 
      MyExtension = fso.GetExtensionName(MyName) 

      System.IO.File.Copy(str, Application.StartupPath + "\Backup\" + MyName & "." & MyExtension, True) 

      CheckedListBox1.Items.Add(str, CheckState.Checked) 
      Thumbcontrol1.AddThumbnail(str) 
      Thumbcontrol1.BackgroundImage = Nothing 
      CheckedListBox1.SelectedIndex = 0 
      ProgressBar2.PerformStep() 
     Next 
     SaveProject.Enabled = True 
     Delete.Enabled = True 
     Edit.Enabled = True 
     ClearAll.Enabled = True 
     CheckAll.Enabled = True 
     UncheckAll.Enabled = True 
     Timer1.Stop() 
     Load.Text = "Loading Completed" 
    Else 
    End If 
    ProgressBar2.Visible = False 
    Load.Text = Nothing 

End Sub 
+0

わかりません。 'OpenFileDialog1.FileNames'のうち、各ファイルに対して' ProgressBar2'の値を10ずつ増やしています。そこにいくつのファイルがあるのか​​、どのように知っていますか?それは2か20かもしれない - あなたはそれをチェックしていない。 –

+0

あなたは 'Step'を忘れずにループにカウンタを追加して(いくつのファイルがロードされたのかを記録しておきましょう)、' ProgressBar2.Value =(counter * 100)/ OpenFileDialog1.FileNames'を ' PerformStep' –

+0

はい私は何を考えているのですか実際に私たちは何人を追加できるのか分かりませんし、オペレータ '/'が 'Double'や '1次元配列' 。 –

答えて

0

ProgressBar2.Step = 10行を削除し、次の操作を行います。

 Dim str As String 
     Dim counter As Integer 'new! 
     For Each str In OpenFileDialog1.FileNames 
      Load.Text = "Loading..." 

      Dim fso As New FileSystemObject 
      Dim MyName As String 
      Dim MyExtension As String 

      MyName = fso.GetFileName(CStr(str)) 
      MyExtension = fso.GetExtensionName(MyName) 

      System.IO.File.Copy(str, Application.StartupPath + "\Backup\" + MyName & "." & MyExtension, True) 

      CheckedListBox1.Items.Add(str, CheckState.Checked) 
      Thumbcontrol1.AddThumbnail(str) 
      Thumbcontrol1.BackgroundImage = Nothing 
      counter += 1 'new 
      CheckedListBox1.SelectedIndex = 0 
      ProgressBar2.Value = (counter * 100)/OpenFileDialog1.FileNames.Length 'new 
     Next 

それはあなたの使用していないスレッドの問題に対処していない、他の回答が指摘して正しいよう。

0

ドントはロード用のUIを使用します。

は、ここに私のコードです。バックグラウンドワーカーを使用します。 BackgroundWorkerは別のスレッドで動作し、進捗状況を報告してプログレスバーにバインドします。

0

Windowsはプログラムに深刻な問題があると考えているため、プログレスバーが移動しなくなります。これは、メインウィンドウを 'ゴースト'ウィンドウに置き換えます。タイトルバーに「応答していません」と表示されます。

これは、プログラムが世界中で死んでいることをユーザーに警告するのに役立ち、ユーザーからの入力に応答しません。マウスをクリックするかキーボードを叩いても何の効果もありません。ユーザーが行うことができるのは、コードが動作をしている間に無意識のうちに見られることです。

これは望ましいユーザーインターフェイスを作成しません。 BackgroundWorkerを使用して解決するので、重い持ち上げは別のスレッドで行われます。ユーザーインターフェイススレッドを応答したままにします。 MSDNの記事を読んで、何をすべきかを知っているので、コードを修正する必要があります。

関連する問題