メインフォーム内でループさせてる間、別フォームのプログレスバーを
制御する事は可能でしょうか?
<MainForm>
Private Sub Command1_click()
Dim i As Integer
For i = 0 to 100 step 1
・
・
処理
・
・
next i
end sub
上記の「i」が100に到達するまでの間、別フォームを表示して
その別フォーム上のプログレスバーと「i」の同期を取りたいのです。
出来ますでしょうか?
ループは自分で制御できるんだからループの中でプログレスバー
の値を変えていけばいいだけでは?別フォーム上のコントロール
の制御で問題がある場合は
過去ログ検索『別フォーム』でどうぞ。
表示更新で問題がある場合は
過去ログ検索『DoEvents』でどうぞ。
>ループは自分で制御できるんだからループの中でプログレスバー
>の値を変えていけばいいだけでは?
それは「i」をPublicにして別フォーム内(プログレスバー)から
参照し、ループ自体はバックグラウンド(DoEvents)で処理すれば
良いと言う事なのでしょうか?
特攻隊長まるるうさんがおっしゃりたいことは、
以下のようにメインフォームでプログレスバーをコントロール
していけばいいんじゃないの?ということだと思います。
frmMain … メインフォーム
frmProgress … プログレス表示のフォーム
prbStep … プログレス表示のフォームのプログレスバーコントロール名
-------------------------------------------------------------------
frmProgress.Show
For i = 0 to 100 step 1
With frmProgress.prbStep
.Value = .Value + i
End With
next i
Unload frmProgress
ミルキースターさん有難う御座います♪
そうですね。
カプセル化やオブジェクト指向を勉強してるなら i を Public
にするってのは時代に逆行してますw。別フォーム側から参照する
ってのもメインフォームと別フォームの立場が逆転してる感じ。
(そーゆー処理が有効な場面もありますが…)
別フォームじゃなくってメインフォームにプログレスバーが
あったらどうします?ループ内で i をセットして DoEvents
(またはRefresh?)するだけでしょ?そのままの処理手順ですよ?
マルチスレッドにする必要もなし。いたって単純な問題です。
質問のサンプルプログラムから[VB6.0]だと思いますが、[VB.NET]
ではフォームのコントロールがデフォルトで Friend 定義になり、
別プロジェクトから見えません。Public に直す事もできますが、
Public なプロパティを自分で作り、そのプロパティ経由でコントロール
にアクセスするようにします。[VB6.0]でもそこまで考える必要が
あるか?微妙なところですが、そーゆー手法も覚えておくと…役に
立つ事があるかも?。
ミルキースターさん特攻隊長まるるうさんありがとうございます。
仰る意味は大体分かりました。
メインのフォームでプログレスバーを実行するようにしたら
分かってきました。
ミルキースターさんに記述いただいたソースでメインから
実行してみたのですが、「i=14」の時点で「プロパティの値が不正です」と
エラーが出てしまいます。
Valueの値は14だと思ったのですが、「91」になってるようです。
恐らくプログレスバーやDoEventsに対する理解が乏しい事も原因だと
思うのですが、プログレスバーに関してはヘルプを見ても今一、理解
出来ません。
どうかご教授願えますでしょうか。
プログレスバーの値で下限・上限の設定と言うのは必要ですよね。
ProgressBar1.Min=0
ProgressBar1.Max=100
ProgressBar1.Value=0
と言うのを記述してみたのですが、「i=14」でエラーが出てしまいます。
すみませんがよろしくお願いします。
> .Value = .Value + i
.Value = .Value + 1ではないでしょうか?
みいさんありがとうございます。
全然違うところに頭が行ってました。
解決しました。
みなさま本当にありがとうございました。
>> .Value = .Value + i
>.Value = .Value + 1ではないでしょうか?
…た…確かに(汗)もしくは
.Value = i
でしょうね。ボクも気を付けてますが、こーゆー
ケアレスミスってよくします。全ての質問にテストの
時間を十分に取ってデバッグして答えるのは無理ですし、
その場で答えている以上、質問者もコードの意味を
理解して吸収していくべき所ですねぇ。
…とか言うのは回答者のエゴでしょうか…。
ツイート | ![]() |