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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

17962閲覧

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

Alice0225

総合スコア206

Visual Studio 2010

Microsoft Visual Studio 2010はMicrosoftが提供している統合開発環境(IDE)です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/02/08 06:32

編集2016/02/08 06:34

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

[流れ]
実行

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

裏でフォルダ関連作業

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

閉じるボタン押下で終了

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

フォーム

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

VB.NET

1 2Shared Sub Main() 3 4 Try 5 'フォルダがなければ作成する 6 If System.IO.Directory.Exists(mainForm.ログフォルダ) = False Then 7 System.IO.Directory.CreateDirectory(mainForm.ログフォルダ) 8 End If 9 'ログファイルの生成 10 mainForm.textFile = New System.IO.StreamWriter(mainForm.ログフォルダ & "\" & "ReportsCollectLog_" & mainForm.nowTime & ".log", True, System.Text.Encoding.Default) 11 mainForm.ShowDialog() 12 Catch ex As Exception 13 MsgBox(ex.Message) 14 End Try 15 16End Sub 17 18 19 20Private Sub Form1_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown 21 22 Call ReportsCopy() 23 Call ReportsBackup() 24 Call ReportsDelete() 25 26 System.Threading.Thread.Sleep(1000) 27 28 Me.Close() 29 good.ShowDialog() 30 31End Sub

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

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

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

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

投稿2016/02/08 19:23

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alice0225

2016/02/09 01:07

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

0

自己解決

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

VB.NET

1Private Sub Form1_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown 2 3 Me.Refresh()※これを追記 4 5 Call ReportsCopy() 6 Call ReportsBackup() 7 Call ReportsDelete() 8 9 System.Threading.Thread.Sleep(1000) 10 11 Me.Close() 12 good.ShowDialog() 13 14End Sub

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

投稿2016/02/08 06:45

Alice0225

総合スコア206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alice0225

2016/02/08 06:46

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

2016/02/08 21:15

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

2016/02/09 01:09

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問