- 締切済み
フォームが表示されるのが遅い
お世話になっております。 最初にForm1_Loadイベントでiniファイルで初期設定をロードしたり、複数のCSVファイルからデータを読み込んでFor~Nextで配列に入れたりする処理をしているのですが、データ多いためフォームが表示されるまでに2秒ほど待たされてしまいます。 フォームを表示してから行いうにはどうしたらいいでしょうか。Application.DoEvent()をループ内に記述してみたりしましたが、効果は見られませんでした。初期設定をLoadではなく、ほかのイベントに記述するしかないでしょうか? タイマーで時間をずらしたりなどで出来ないことは無いかもしれませんが、無駄も多くなりそうなので一番一般的な方法を知りたいです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- ふと疑問に思ったこと。
現在VB2008をのんびり勉強中のものです。 ふと疑問に思ったのですが、VB6時代では Load フォーム名 で、対象フォームのLoadイベントのみを発生させることができました。 これだと、見た目上フォームを表示せずにLoadイベントを発生させることができました。 同様のことをVB2008でもやってみようと思ったのですが、 フォーム名 = New Form で初期化。 Loadだけを読み込もう・・・・あれ?フォーム先のイベントを何か発生させないとLoadされないぞ!? っていうことに気付きました。 フォーム名.showだとフォームが表示されてしまうし・・・ とりあえずshowで表示させた後、すぐにhideで隠してしまえばいいのですが、もっとスリムなやり方はありますでしょうか???
- ベストアンサー
- Visual Basic
- Accessのフォームを閉じるのではなく、非表示にする
Accessのフォームにおいて、 ボタンをクリックすると、そのフォームが閉じる、 というイベントをつけております。 そのイベントを、フォームが閉じるのではなく、 フォームを非表示にし、メモリ上では開いたまま というイベントに直したいのですが、 Form_F003.Visible = False というような記述をするという 解釈でよろしいのでしょうか?? その解釈でないとしたら、 フォームのソース上で、 フォームを非表示にし、メモリ上では開いたまま というプロパティを設定できるでしょうか?? どなたか、ご指導くださいませ。
- ベストアンサー
- その他(データベース)
- フォームロードについて
VB2008で、Form_Load()に Me.Visible = falseや Me.Close()としてもフォームの非表示やフォームを閉じたりしないのですが、なぜなのでしょうか? 最初に起動した場合に、Form_Loadで初期設定を行った後に、自動的に直ぐにフォームを非表示や閉じることをしたいです。
- ベストアンサー
- Visual Basic
- フォームが表示されない
vb.net使用です。 メニュー画面(メイン) 待ち画面(テキストボックスとボタンがあります。) 実行画面 の3つのフォームがあります。 メイン画面から待ち画面を表示し、待ち画面から実行画面に移ります。 待ち画面でテキストにデータが入るまでループさせていて、 テキストにデータが入ってから実行画面を表示させるプログラムを作っているのですが、 待ち画面のループのプログラムで実行画面を表示させているのですが、(この時は表示している) プログラムが終了すると実行画面が消えてしまいます。 ループのプログラムをやめて、ボタンから行うと実行できます。 INVOKEも使用してみても状況がかわりません。 実行画面が使用できるようにするにはどうしたらよいか教えていただけないでしょうか。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub 待ち画面_Load(sender As Object, e As System.EventArgs) Handles Me.Load Psmachi End sub Private Sub Psmachi() Do Until txttxt.text <> “” 実行画面.show Me.hide Loop End sub Private sub bottan_click 実行画面.show Me.hide End sub
- ベストアンサー
- Visual Basic
- VB.Netのフォームロードイベントについて
こんにちわ。 いまVB.Net2005Expressで勉強をしている者です。 あるフォームがロードされるときの処理を書こうとすると, 従来のVB6ではFormオブジェクトにLoadイベントがありましたが, VB.Net2005では,最初の状態ではフォームのイベントには 「New」,「Finalize」,「InitializeComponent」の3つしかありません。 もしVB.Net2005でForm_Loadイベントを書きたいときは, 自分で, 「Private Sub Form1_Load(Byval ~」と書かなくてはいけないのでしょうか? 初歩的な質問になるかもしれませんが,教えてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- フォームモジュールが作られない
アクセスです。 新規でフォーム1を作成し、何もしないで(いじらないで)保存し、 VBE画面でフォーム1のForm_Loadイベントにコードを記述しようと思っても、 画像のようにフォームモジュールがありません。 フォームのデザインビューから適当に何かのイベントプロシージャーのボタンを押せば、 フォームモジュールが生成されます。 これは仕様でしょうか? エクセルは最初からシートモジュールやブックのモジュールがありますよね。
- ベストアンサー
- オフィス系ソフト
- VBでのフォームのロード
こんにちは。 フォームを表示する際に、Form_Loadイベント内で色々処理をさせています。 私としては、その処理が終了した時点で画面が表示される、と思っていたのですが、画面が表示される際に、枠だけの半透明?のような感じのウィンドウが数秒表示されてから、通常の画面が表示されます。 Form_Load内の処理自体が重いのだと思い、以前別の質問をさせて頂いた際に教えていただいたDoEventsを、重そうな部分に挿入して試しているのですが直りません。 またInitializeイベント内で処理をしても同じようになります・・・ 何か対処法はありますでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- フォームのイベントを標準モジュールから呼び出す
フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。
- ベストアンサー
- オフィス系ソフト
- フォームロード時にアンロード。
VBでフォームロード時に、ある条件のときだけ、 自フォームをアンロードするプログラムを作りたいのですが、 form_load プロシージャにunload Me と書くと、 どうしても、一瞬フォームが表示されます。 フォームを表示せずにアンロードする方法は ないのでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- フォームを表示してからメッセージボックスを表示する
メッセージボックスが表示される前に、フォームを表示させたいです。アクセスです。 ナビゲーションウインドウからフォームをダブルクリックしてフォームを開くのですが、 今のままだとメッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを表示してからメッセージボックスを表示するにはどうすればいいでしょう? Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" End Sub だと、先ほど述べたように、メッセージボックスが表示されてからフォームが表示されてしまいます。 フォームを開いたときのイベントは複数あるようで、 Private Sub Form_Activate() MsgBox "Form_Activate" Debug.Print "Form_Activate" End Sub Private Sub Form_Current() MsgBox "Form_Current" Debug.Print "Form_Current" End Sub Private Sub Form_GotFocus() MsgBox "Form_GotFocus" Debug.Print "Form_GotFocus" End Sub Private Sub Form_Open(Cancel As Integer) MsgBox "Form_Open" Debug.Print "Form_Open" End Sub Private Sub Form_Load() MsgBox "Form_Load" Debug.Print "Form_Load" End Sub をすると、 ・Form_Load ・Form_Activate ・Form_GotFocus ・Form_Open ・Form_Current の順に開きますが、やはりフォームが最後に表示されてしまいます。 どうにかして先にフォームを表示させる方法はないでしょうか? ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
お返事おくれてしまいました。 現在教えていただいたページを参考にしつつ、マルチスレッドに挑戦しております。 とりあえず現在は、ロードイベントの一番最初に Me.Show() と記述してそのあとから初期設定をおこなうようにしたところ、 最初にフォームが表示されるようになりました。 どうもありがとうございました。