C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ProgressBarの表示をその時のみ最前面へ移動

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■96952 / inTopicNo.1)  ProgressBarの表示をその時のみ最前面へ移動
  
□投稿者/ ゆい (22回)-(2021/03/06(Sat) 10:17:34)

分類:[VB.NET/VB2005 以降] 

超初心者ですみません。

その時のみProgressBarの表示をChartなどの最前面へ移動をし、完了がすれば最背面へ移動もしくは表示を消したいです。
よろしくお願いします。

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        'コントロールを初期化する
        ProgressBar1.Minimum = 0
        ProgressBar1.Maximum = 10
        ProgressBar1.Value = 0
        Label1.Text = "0" & "/" & 10
        'Label1を再描画する
        Label1.Update()

        '時間のかかる処理を開始する
        Dim i As Integer
        For i = 1 To 10
            '1秒間待機する(時間のかかる処理があるものとする)
            System.Threading.Thread.Sleep(1000)

            'ProgressBar1の値を変更する
            ProgressBar1.Value = i
            'Label1のテキストを変更する
            Label1.Text = i.ToString() & "/" & 10

            'Label1を再描画する
            Label1.Update()
            '(フォーム全体を再描画するには、次のようにする)
            'Me.Update()
        Next
        '完了報告
        MessageBox.Show("完了しました", "○○の作成", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    End Sub

引用返信 編集キー/
■96953 / inTopicNo.2)  Re[1]: ProgressBarの表示をその時のみ最前面へ移動
□投稿者/ 魔界の仮面弁士 (2993回)-(2021/03/06(Sat) 11:24:55)
2021/03/06(Sat) 11:30:20 編集(投稿者)

No96952 (ゆい さん) に返信
> その時のみProgressBarの表示をChartなどの最前面へ移動をし、完了がすれば最背面へ移動もしくは表示を消したいです。

ZOrder の入替なら
 ProgressBar1.BringToFront()
 ProgressBar1.SendToBack()
です。

表示/非表示の切替なら
 ProgressBar1.Show()
 ProgressBar1.Hide()
もしくは
 ProgressBar1.Visible = booleanValue
です。

> Label1.Text = "0" & "/" & 10
Label1.Text = "0/10"
で良いのでは?

> Dim i As Integer
> For i = 1 To 10
この書き方は、VB.NET 2002 時代のものですね。現在は推奨されていません。

2003 以降なら
 For i As Integer = 1 To 10
のようにして、変数 i のスコープを For 内に制限することが望ましいです。

また、2008 以降ではローカル型の推論が使えるようになったので、上記を
 For i = 1 To 10
と省略表記することができます。2002 と違って Dim 宣言 も不要です。
この場合も 2003/2005 同様、変数 i As Integer が For 内での利用に限定されるようになります。


> '1秒間待機する(時間のかかる処理があるものとする)
> System.Threading.Thread.Sleep(1000)
メッセージ ポンプや COM の動作に影響を与えてしまう事があるため、
UI スレッドから Sleep を呼び出すことは避けるべきです。

また、時間のかかる処理がある場合は、それを別スレッドで処理することが望ましいです。
VB2012 以降であれば Asnyc / Await 、VB2005〜2010 では BackgroundWorker の利用を検討してみてください。
引用返信 編集キー/
■96960 / inTopicNo.3)  Re[2]: ProgressBarの表示をその時のみ最前面へ移動
□投稿者/ ゆい (23回)-(2021/03/06(Sat) 17:10:14)
No96953 (魔界の仮面弁士 さん) に返信

ありがとうございます。
希望してたようになりました。

For i = 1 To 10 などはネットのあったのをそままにしたためです。
すみません。

今回のはそんなにも複雑なものでもありませんので、教えてもいただいた BackgroundWorker の利用などは次回にさせていただくことにします。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ