- - PR -
時間がかかる処理の進行状況をダイアログで表示するには?
1
投票結果総投票数:22 | |||
---|---|---|---|
Windows | 2票 | 9.09% | |
XP | 4票 | 18.18% | |
.NET | 16票 | 72.73% | |
|
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-07-15 17:10
NET TIPS にありました
時間がかかる処理の進行状況をダイアログで表示するには? の件で教えてください。 Dim waitDlg As WaitDialog = New WaitDialog ------------ のところでエラーになるのですが WaitDialogはどのように設定すればよいのでしょうか? よろしくご教授お願いします。 | ||||
|
投稿日時: 2004-07-15 22:52
諸農です。
どのようなエラーが出ていますか? まさかとは思いますが、ダウンロードしたソースを プロジェクトに含めていないってことではないですよね? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 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のみ配置しています。 よろしくお願いします。 | ||||
|
投稿日時: 2004-07-16 14:41
Hasumiです。
にあるようにダウンロードしたソース(waitdlg.vb)をプロジェクトに 追加してください。 もう一度記事を確認してみてください。 WaitDialogクラスを呼び出すサンプルコードもダウンロードできます。 | ||||
|
投稿日時: 2004-07-16 16:39
せっかく、教えていただきながらうまくいかず申し訳ありません。
私は、まだサンプルプログラムをコピペでやったぐらいの経験しかありませんので それ以外の方法でインストする必要があるのであれば良く分かりません waitdlg.vbを上記のプログラムの上にコピペして動かしてみましたが エラーは出なくなりましたが、なんの反応もありません。 多分単純にコピペで持ってきただけでは、ダメだと思いますが、移行の方法について もう少し、詳しくご指導いただければありがたいのですが。 | ||||
|
投稿日時: 2004-07-16 16:57
Hasumi 様
有難うございました。 いけました !! すみません、初めからもう一度やってみました、正常に動きました。 有難うございました。 今後ともよろしくお願い申し上げます。 |
1