VB.NETでフォームロード中のエラー時に終了する方法について

このQ&Aのポイント
  • VB.NETでフォームロード中にエラーが発生した場合、適切な処理を行う方法について知りたいです。
  • アプリケーションフレームワークを有効にした状態で最初に呼び出されたフォームにエラーが発生した場合にフォームを閉じる方法はありますか?
  • アプリケーションフレームワークを無効にした状態で、アプリケーションフレームワークが提供する機能と同じものを実装する方法はありますか?
回答を見る
  • ベストアンサー

VB.NETでフォームロード中のエラー時に終了する方法について

仕様・環境 WindowsXP Professional VisualStudio 2005 VB.NET(.NET Framework 2.0) アプリケーション起動時、最初のフォームロード中にデータの読込みなどを行っており、読込みエラーが起きた場合などを想定しています。 LoadイベントではCloseメソッドの呼び出しは行ってはいけないため、どのような処理にするのがベストなのかを知りたいです。 ひとつの解決策としてアプリケーションフレームワークを無効にし、Sub Mainからスタートする方式にして、 フォームを開く前にデータの読込み判定などを行えば問題は解決できるのですが、 アプリケーションフレームワークの機能を使っているため、設定を無効にすることが出来ません。 アプリケーションフレームワークを有効にした場合は、スタートアップフォームの選択肢に独自のMainが選択できません。 以下のどちらかが解決できればよいのですが、よろしくお願いします。 ・アプリケーションフレームワークを有効にした状態で最初に呼び出されたフォームにエラーが発生した場合にフォームを閉じる方法はあるのか? ・アプリケーションフレームワークを無効にした状態でアプリケーションフレームワークが提供する機能と同じものを実装する方法はあるのか? 2番目については独自で実装すればいくらでも可能だとは思いますが、 簡単に(例えばフレームワークをONにする程度の労力)実装する方法があるのかということです。 以上ですが、よろしくお願いします。

  • Geute
  • お礼率100% (2/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

フォームのNewメソッドをオーバライドしてこの中で判定を行ってShownイベントなどでフォームを閉じるようにしてはいかがでしょう フォームクラスに判定用の変数を準備 dim bflag as Boolean = false Sub New()   ' 自動生成のコード   InitializeComponent()   ' 独自の判定処理   bFlag = True End Sub ' 引数省略 Private Sub Form1_Shown( ... ) Handles MyBase.Shown   if bFlag = true then     MsgBox "起動時にエラーがありました"     Me.Close()   end if End Sub といった具合で ...

Geute
質問者

お礼

早速の回答ありがとうございました。 FormにShownというイベントがあるということに気づいていませんでした。 一度フォームが表示されてしまいますが、その時点でShownイベントが発生するのでそこでフォームをクローズするといった処理を実装することが出来ました。 Shwonイベントのヘルプを調べてみたところ、.NET Framework 2.0から追加されたイベントだったのですね。 はじめてフォームが表示された時のみ発生するイベントということで、今回の件以外でもいろいろと利用できそうです。

関連するQ&A

  • VB6.0からVB.Netへの移行時に

    現在、VB6.0からVB.netへの移行作業をしています。 VB.netでは、Sub_Mainに書かれた処理が終了すると、 アプリケーションも終了するという事がヘルプに書かれて いました。変更手順もありましたので、その通りに 表示したいフォームをスタートアップオブジェクトに指定し、フォームのLoadイベントからSub_Mainを呼び出すように変更しました。 が、エラーがでます。 「System.InvalidOperationException' のハンドルされていない例外が system.windows.forms.dll で発生しました。」 「追加情報 : 1 つのスレッド上で、2 つ目のメッセージ ループを開始できません。Application.RunDialog または Form.ShowDialog を代わりに使用してください。」 .netに触るのは初めてで、入門書と格闘してますが、 エラーの意味する事すらわかりません。 何が問題なのでしょうか? 新規にフォームを作成したものは、問題なく表示されたのですが、VB6.0から移行したものは表示すらできない情況です。

  • vb.netアプリケーション全てのフォームを前面に

    初心者です。 VisualBasic2010で複数のフォームを持つアプリケーションを作成しています。 それぞれのフォームに親子関係はありません。 全てのフォームが開いている状態で別のアプリケーションを操作し、 [Alt]+[Tab]やツールバーから選択するなどで1つのフォームを選択すると、 そのフォームのみ前面に表示され、 アプリケーション内の他のフォームは別アプリケーションの後ろに隠れたままとなります。 それを全て手前に表示する方法はありますでしょうか。 Activatedイベントで他のフォームをアクティブにせずに開く、などできればおしえてください。 よろしくお願いいたします。

  • VB2005 フォームロード時にメッセージ表示

    VB素人です。 VB2005で、あるフォームクラスを起動した際の フォームロード処理で、エラー判定処理(DBデータを取得して判定)を 行っています。 エラーと判定された場合、メッセージBOXを表示するのですが、 フォームが表示される前に、メッセージのみが表示されてしまいます。 フォームが表示→メッセージが表示(同時も可)にするには どのようにすれば良いのでしょうか? アドバイスをお願いします。

  • VB.NETでブラウザのフォームに入力する方法について

    VB.NETでブラウザに表示されたWEBページのフォームに データを入力したり、ラジオボタンの設定をしたりしたいのですが、 入力内容によってフォームの入力欄がEnabled = True や Falseに 切り替わる入力欄がある場合、VBでそのエレメントに データを設定してもフォームを送信などをした際に反映されていません。 例えばラジオボタンで選択A、選択B、その他という3つの選択があって、 その他を選択すると、テキスト入力エリアが入力可能になるというフォームです。 ブラウザに直接手動で設定を変更すれば、入力欄のEnabledが切り替わるのですが、 VBでラジオボタンを設定した場合は切り替わらず、Enabled = False の状態のまま VBでデータを設定しても受け付けられないようです。 この為、VBでデータを設定した際に、別の欄のEnabledの状態を変えたいのですが、 どのような方法でやれば良いでしょうか。ご教授いただければ幸いです。

  • VB6プログラムを.netで呼び出し、使う方法

    VB6で作った標準EXEプログラムを インターネット上でブラウザにて動作できるようにしたいと 考えております。 ASP.NETアプリケーションにて変換・作成して、 IISサーバに乗せればいいと考えていたのですが、 VB6のプログラムをアップグレードしようと思ったところ、 エラーが出てアップグレードできないので、 ネットや本で調べたところ、 アップグレードウィザードでアップグレードできない場合は (1)継承されていないフォーム等を変換した後にアップグレードするか、 (2)全く新しく最初からプログラムを作り直すか、 (3)VB6のプログラムを.netプログラムでそのまま呼び出して使う、 という3つの選択肢があると書かれていました。 そこで、(3)ができるようならしてみたいと思うのですが、 詳しい方法が書かれておらず困っております。 その方法についてお詳しい方、あるいは それについて詳しく書かれている本やサイトを ご存知の方がいらっしゃいましたら、ぜひお教え下さい。 よろしくお願いいたします。

  • GridViewの一行を別フォームに移す方法

    カテゴリ違いだったら申し訳ありません。 C#勉強中の初心者です。 「フォーム1で作成したDataGridView1のデータの内の一行を選択し、選択した一行をフォーム2に表示する」 というプロジェクトを作成したいのですが、なかなかうまくいかず困っています。 検索や参考書などで調べたりしたのですがどうも上手くいかず...。 お力添えいただけないでしょうか...? よろしくお願いいたします。 ↓↓以下使用 Visual Studio 2017 Community Windows フォーム アプリケーション(.NET Framework) Visual C#

  • VB2008→VB2010でエラーが出てまいります

    VB2008→VB2010でエラーが出てまいります  今日は、質問させていただきます。どうぞよろしくお願いいたします。  VB2008+Vistaから、VB2010に変更しようといたしました。 一度必要のないと思われるものをすべてアンインストールし、 VB2010をインストール後、作成中のプロジェクトを開きましたところ、 以下のようなエラーが出てまいります。 ↓【エラー一覧】の項目でございます 警告 1 タイプ ライブラリ "Microsoft.Office.Core" のラッパー アセンブリが見つかりません。 警告 2参照コンポーネント '(プロジェクト名)' が見つかりませんでした。 警告 3参照コンポーネント 'Microsoft.Office.Core' が見つかりませんでした。 ↓【参照】タブを開こうといたしますと、下のような表示が出てまいります。 ページを読み込もうとしているときにエラーが発生しました。 ターゲット フレームワーク '.NETFramework,Version=v4.0' の mscorlib を解決できませんでした。これは、ターゲット フレームワークがインストールされていない場合、またはフレームワーク モニカーの形式が正しくない場合に発生する可能性があります。  .NET Frameworkの何かを消してしまったのでは?などと考えまして、 再インストールなど奮闘してみましたが、解決いたしません。。。 インストール済みの.NET~は添付図の項目になります。  もしお詳しい方がいらっしゃいましたら,是非ともアドバイスいただけないでしょうか。 どうぞよろしくお願いいたします。

  • VB2008でデータソース取得時にエラーが出ます。

    OS:WindowsXP、VB2008+SQLSERVER2005の環境でデータベースソフトを作成中ですが、データーソースを取り込む際に、下記のエラーが出ます。 ネットで調べてVB2008、SQLSERVERの再インストールなどを行いましたが、解決しませんでした。 このようなエラーが出た方がいらっしゃれば、解決方法をご教示下さい。 'Microsoft.VisualStudio.DataDesign.SyncDesigner.SyncFacade.SyncTableConfigManager'のタイプ初期化子が例外をスローしました。

  • VisualStudio.netの起動時のエラーメッセージ

    VisualStudio.net2003を起動したときに **************************************************************** アドイン’学生用コースツール’の読み込みに失敗したか、または例外が発生しました。 このアドインを削除しますか? [はい]を選択した場合、使用前にこのアドインを再インストールする必要があります。 エラーメッセージ:クラスが登録されていません エラー番号:80040154 [はい] [いいえ] **************************************************************** というものが出てしまいます。 このときはいまたはいいえを選択してもソフトは正常に起動しました。 ソフトを正常起動できるならこのエラーはほっといても大丈夫なのでしょうか?? パソコン初心者なのでここら辺のものがでてくるとどうしていいのかわからなくなってしまうのですが・・・ またこのエラーを解決する方法があったら教えてください。

  • 無効なパスというエラーメッセージが出てフォームが開かない

    Access2000で検索システムを作りました。条件を入力したらマッチするデータが表示される(フォームを開く形にしています。)という流れです。それまで正常に機能していたのですが,ネットワーク上のパソコンの名前を変えたところ、「'\\変更前のパソコン名\****\**.mdb'は無効なパスです。パス名を正確に指定しているか、またはファイルが属するサーバーに接続しているかを確認して ください。」というエラーが出てフォームが開きません。  エラーが出て止まってしまう箇所の記述は DoCmd. Openform "フォーム名"となっています。フォーム名の前にパスを指定することができるのでしょうか?ヘルプではさがせなかったのですが。どなたか回避方法を教えてください。

専門家に質問してみよう