質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

VB.NET フォームの表示について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 11K+

score 190

現在、VB.NETにてフォルダ操作関連のアプリを作成しています。
プログラムの流れとしては、

[流れ]
実行

処理中フォーム表示(画面中央上部に「処理中です。」とラベル表示

裏でフォルダ関連作業

正常終了or異常終了フォーム表示

閉じるボタン押下で終了

というものなのですが、実行直後の「処理中フォーム」が何度実行しても

フォーム

のようにラベル部分が正しく表示されません。
※正常or異常終了時のフォームは問題なくラベル等表示されます。

Shared Sub Main()

    Try
        'フォルダがなければ作成する
        If System.IO.Directory.Exists(mainForm.ログフォルダ) = False Then
            System.IO.Directory.CreateDirectory(mainForm.ログフォルダ)
        End If
        'ログファイルの生成
        mainForm.textFile = New System.IO.StreamWriter(mainForm.ログフォルダ & "\" & "ReportsCollectLog_" & mainForm.nowTime & ".log", True, System.Text.Encoding.Default)
        mainForm.ShowDialog()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub



Private Sub Form1_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown

    Call ReportsCopy()
    Call ReportsBackup()
    Call ReportsDelete()

    System.Threading.Thread.Sleep(1000)

    Me.Close()
    good.ShowDialog()

End Sub

フォームを使用したアプリケーションの作成経験がないため、フォームの呼び出し方法も
あっているのかどうか…といった知識レベルです。。。
情報が少なく大変申し訳ございませんが、皆様のお力をお借りできれば幸いです。

※2/8 15:31
タイトルがまったく関係ないものになっていた為修正させて頂きました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

誰もが通る道ですね
Me.Refreshの次はApplication.DoEventsでしょうか

このままだと[応答なし]が頻発するかもです
もちろんやろうとしている処理しだいですが、LoadとかShownとかに重い処理を書くのはあまりおすすめではありません

もしステップアップされるなら、重い処理は別スレッドで処理するように考えてコードを書くようにするとよろしいかと

BackgroundWorker クラス
Async および Await を使用した非同期プログラミング

その際にはクリティカルセクションという言葉も知っておいてください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/09 10:07

    アドバイス頂きありがとうございます。
    まだまだ知識不足ですので頂いた情報について調べさせて頂きたいと思います。
    ご丁寧にありがとうございますm(._.)m

    キャンセル

check解決した方法

0

ネットで文言をアレコレ変えて検索したところ、
裏で作業が行われる場合、画面更新がされないまたは遅れる(?)場合があり、
その場合は「Me.Refresh()」を使用することで改善する。
といった旨の記事を見つけたので、

Private Sub Form1_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown

    Me.Refresh()※これを追記

    Call ReportsCopy()
    Call ReportsBackup()
    Call ReportsDelete()

    System.Threading.Thread.Sleep(1000)

    Me.Close()
    good.ShowDialog()

End Sub


のようにMe.Refresh()を追記したところ、問題なく表示されるようになりました。
調査不足大変申し訳ございませんでした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/08 15:46

    問題が自己解決した為、「解決済」とさせていただきます。

    キャンセル

  • 2016/02/09 06:15

    イベント駆動型プログラミングについての理解が無い。

    キャンセル

  • 2016/02/09 10:09

    >daiveさん
    ご指摘ありがとうございます。
    私自身まだまだ未熟で、わからないことだらけといったところです。
    「イベント駆動型プログラミング」という言葉は初めて聞きましたので調べ、勉強させて頂きたいと思います。
    コメントありがとうございますm(._.)m

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る