- PR -

時間がかかる処理の進行状況をダイアログで表示するには?

1
投票結果総投票数:22
Windows 2 9.09%
XP 4 18.18%
.NET 16 72.73%
  • 投票は恣意的に行われます。統計的な調査と異なり、投票データの正確性や標本の代表性は保証されません。
  • 投票結果の正当性や公平性について、@ITは一切保証も関与もいたしません。
投稿者投稿内容
ふろんてぃあ
会議室デビュー日: 2004/07/15
投稿数: 7
投稿日時: 2004-07-15 17:10
NET TIPS にありました

時間がかかる処理の進行状況をダイアログで表示するには?

の件で教えてください。

Dim waitDlg As WaitDialog = New WaitDialog
       ------------ のところでエラーになるのですが
 WaitDialogはどのように設定すればよいのでしょうか?
よろしくご教授お願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-07-15 22:52
諸農です。

引用:

ふろんてぃあさんの書き込み (2004-07-15 17:10) より:

Dim waitDlg As WaitDialog = New WaitDialog
       ------------ のところでエラーになるのですが
 WaitDialogはどのように設定すればよいのでしょうか?



どのようなエラーが出ていますか?
まさかとは思いますが、ダウンロードしたソースを
プロジェクトに含めていないってことではないですよね?


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
ふろんてぃあ
会議室デビュー日: 2004/07/15
投稿数: 7
投稿日時: 2004-07-16 13:23
ご返事ありがとうございます。
まだ初心者なもので、よく理解できていないのですが
新しいプロジェクトの作成で、サンプルをそのままコピペしてテストしています。
長くなり申し訳ありませんが、全文下記の通りです。

Imports System.Threading

Public Class Form1
Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

Public Sub New()
MyBase.New()

' この呼び出しは Windows フォーム デザイナで必要です。
InitializeComponent()

' InitializeComponent() 呼び出しの後に初期化を追加します。

End Sub

' Form は dispose をオーバーライドしてコンポーネント一覧を消去します。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

' Windows フォーム デザイナで必要です。
Private components As System.ComponentModel.IContainer

' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
' Windows フォーム デザイナを使って変更してください。
' コード エディタは使用しないでください。
Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.ProgressBar1 = New System.Windows.Forms.ProgressBar
Me.SuspendLayout()
'
'ProgressBar1
'
Me.ProgressBar1.Location = New System.Drawing.Point(232, 312)
Me.ProgressBar1.Name = "ProgressBar1"
Me.ProgressBar1.Size = New System.Drawing.Size(464, 23)
Me.ProgressBar1.TabIndex = 0
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
Me.ClientSize = New System.Drawing.Size(824, 446)
Me.Controls.Add(Me.ProgressBar1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region





Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
' 進行状況ダイアログの初期化処理
Dim waitDlg As WaitDialog = New WaitDialog
             ↑この所がエラ〜 !!!!!!!!!!


waitDlg.Owner = Me ' ダイアログのオーナーを設定する
waitDlg.MainMsg = "進行状況を表示しています……" ' 処理の概要を表示
waitDlg.ProgressMax = 200 ' 全体の処理件数を設定
waitDlg.ProgressMin = 0 ' 処理件数の最小値を設定(0件から開始)
waitDlg.ProgressStep = 1 ' 何件ごとにメータを進めるかを設定
waitDlg.ProgressValue = 0 ' 最初の件数を設定

' オーナーのフォームを無効にする
Me.Enabled = False

' 進行状況ダイアログを表示する
waitDlg.Show()

' 時間のかかる処理
Dim iCount As Integer = 0 ' 何件目の処理かを示すカウンタ
Dim i As Integer
For i = 0 To 200 - 1 Step i + 1
' 処理中止かどうかをチェック
If waitDlg.IsAborting = True Then
Exit For
End If

' 進行状況ダイアログの詳細な処理内容を設定
' (0件目、51件目、101件目、151件目で表示更新)


If (i = 0) Or ((i <> 1) And (i Mod 50 = 1)) Then
waitDlg.SubMsg = "50件ごと表示を更新しています……:" + _
(CType((i / 50) + 1, Integer)).ToString()
End If

' 進行状況ダイアログのメーターを設定
waitDlg.ProgressMsg = _
(CType((iCount * 100 / 200), Integer)).ToString() + "% " + _
"(" + iCount.ToString() + " / 200 件)"

' メッセージ処理を促して表示を更新する
Application.DoEvents()

' 何らかの処理
DoSomeWork()

' 処理カウントを1ステップ進める
iCount = iCount + 1
waitDlg.PerformStep()
Next

' 最終メッセージを表示して、閉じるのを少し遅らせる
If waitDlg.DialogResult = DialogResult.Abort Then
waitDlg.SubMsg = "処理を中断しました。"
Else
waitDlg.SubMsg = "処理を完了しました。"
waitDlg.ProgressMsg = "100% (200 / 200 件)"
End If
Application.DoEvents()
Thread.Sleep(100)

' いったんオーナーをアクティブにする
Me.Activate()

' 進行状況ダイアログを閉じる
waitDlg.Close()

' オーナーのフォームを有効に戻す
Me.Enabled = True
End Sub

' 何らかの処理
Private Sub DoSomeWork()
Thread.Sleep(100)
End Sub

End Class

で 下記のエラーがでます。

C:\Documents and Settings\fuke\デスクトップ\処理メータ\Form1.vb(65): 型 'WaitDialog' が定義されていません。


 フォームには、ProgressBar1のみ配置しています。
よろしくお願いします。
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-07-16 14:41
Hasumiです。
引用:
諸農さんの投稿 2004-07-15 22:52
まさかとは思いますが、ダウンロードしたソースを
プロジェクトに含めていないってことではないですよね?


にあるようにダウンロードしたソース(waitdlg.vb)をプロジェクトに
追加してください。

もう一度記事を確認してみてください。
WaitDialogクラスを呼び出すサンプルコードもダウンロードできます。
ふろんてぃあ
会議室デビュー日: 2004/07/15
投稿数: 7
投稿日時: 2004-07-16 16:39
せっかく、教えていただきながらうまくいかず申し訳ありません。

私は、まだサンプルプログラムをコピペでやったぐらいの経験しかありませんので
それ以外の方法でインストする必要があるのであれば良く分かりません

waitdlg.vbを上記のプログラムの上にコピペして動かしてみましたが
エラーは出なくなりましたが、なんの反応もありません。
多分単純にコピペで持ってきただけでは、ダメだと思いますが、移行の方法について
もう少し、詳しくご指導いただければありがたいのですが。
ふろんてぃあ
会議室デビュー日: 2004/07/15
投稿数: 7
投稿日時: 2004-07-16 16:57
Hasumi 様

有難うございました。
いけました !!

すみません、初めからもう一度やってみました、正常に動きました。
有難うございました。
今後ともよろしくお願い申し上げます。
1

スキルアップ/キャリアアップ(JOB@IT)