メインフォームから別フォームのプログレスバーを制御するには?

解決


テリー  2005-03-29 23:14:31  No: 120537

メインフォーム内でループさせてる間、別フォームのプログレスバーを
制御する事は可能でしょうか?

<MainForm>
Private Sub Command1_click()
  
  Dim i As Integer
  For i = 0 to 100 step 1
      ・
      ・
     処理
      ・
      ・
  next i

end sub

上記の「i」が100に到達するまでの間、別フォームを表示して
その別フォーム上のプログレスバーと「i」の同期を取りたいのです。

出来ますでしょうか?


特攻隊長まるるう  2005-03-30 00:05:59  No: 120538

ループは自分で制御できるんだからループの中でプログレスバー
の値を変えていけばいいだけでは?別フォーム上のコントロール
の制御で問題がある場合は
過去ログ検索『別フォーム』でどうぞ。
表示更新で問題がある場合は
過去ログ検索『DoEvents』でどうぞ。


テリー  2005-03-30 01:25:04  No: 120539

>ループは自分で制御できるんだからループの中でプログレスバー
>の値を変えていけばいいだけでは?

それは「i」をPublicにして別フォーム内(プログレスバー)から
参照し、ループ自体はバックグラウンド(DoEvents)で処理すれば
良いと言う事なのでしょうか?


ミルキースター  2005-03-30 01:39:08  No: 120540

特攻隊長まるるうさんがおっしゃりたいことは、
以下のようにメインフォームでプログレスバーをコントロール
していけばいいんじゃないの?ということだと思います。

frmMain     … メインフォーム
frmProgress … プログレス表示のフォーム
prbStep     … プログレス表示のフォームのプログレスバーコントロール名

-------------------------------------------------------------------

  frmProgress.Show

  For i = 0 to 100 step 1

    With frmProgress.prbStep
  
      .Value = .Value + i
  
    End With

  next i

  Unload frmProgress


特攻隊長まるるう  2005-03-30 02:09:24  No: 120541

ミルキースターさん有難う御座います♪
そうですね。
カプセル化やオブジェクト指向を勉強してるなら i を Public
にするってのは時代に逆行してますw。別フォーム側から参照する
ってのもメインフォームと別フォームの立場が逆転してる感じ。
(そーゆー処理が有効な場面もありますが…)

別フォームじゃなくってメインフォームにプログレスバーが
あったらどうします?ループ内で i をセットして DoEvents
(またはRefresh?)するだけでしょ?そのままの処理手順ですよ?
マルチスレッドにする必要もなし。いたって単純な問題です。

質問のサンプルプログラムから[VB6.0]だと思いますが、[VB.NET]
ではフォームのコントロールがデフォルトで Friend 定義になり、
別プロジェクトから見えません。Public に直す事もできますが、
Public なプロパティを自分で作り、そのプロパティ経由でコントロール
にアクセスするようにします。[VB6.0]でもそこまで考える必要が
あるか?微妙なところですが、そーゆー手法も覚えておくと…役に
立つ事があるかも?。


テリー  2005-03-30 02:43:35  No: 120542

ミルキースターさん特攻隊長まるるうさんありがとうございます。
仰る意味は大体分かりました。
メインのフォームでプログレスバーを実行するようにしたら
分かってきました。

ミルキースターさんに記述いただいたソースでメインから
実行してみたのですが、「i=14」の時点で「プロパティの値が不正です」と
エラーが出てしまいます。

Valueの値は14だと思ったのですが、「91」になってるようです。

恐らくプログレスバーやDoEventsに対する理解が乏しい事も原因だと
思うのですが、プログレスバーに関してはヘルプを見ても今一、理解
出来ません。

どうかご教授願えますでしょうか。

プログレスバーの値で下限・上限の設定と言うのは必要ですよね。
ProgressBar1.Min=0
ProgressBar1.Max=100
ProgressBar1.Value=0

と言うのを記述してみたのですが、「i=14」でエラーが出てしまいます。

すみませんがよろしくお願いします。


みい  2005-03-30 02:53:33  No: 120543

>    .Value = .Value + i
.Value = .Value + 1ではないでしょうか?


テリー  2005-03-30 03:00:39  No: 120544

みいさんありがとうございます。

全然違うところに頭が行ってました。
解決しました。
みなさま本当にありがとうございました。


特攻隊長まるるう  2005-03-30 03:33:50  No: 120545

>>    .Value = .Value + i
>.Value = .Value + 1ではないでしょうか?
…た…確かに(汗)もしくは
    .Value = i
でしょうね。ボクも気を付けてますが、こーゆー
ケアレスミスってよくします。全ての質問にテストの
時間を十分に取ってデバッグして答えるのは無理ですし、
その場で答えている以上、質問者もコードの意味を
理解して吸収していくべき所ですねぇ。

…とか言うのは回答者のエゴでしょうか…。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加