コードに明らかに問題があるのではないかと心配していますが、フォームを作成して表示したときに_Form.Load
_イベントが発生しない状況に遭遇しました。
フォームがサブクラス化されておらず(一部の検索で問題が発生したため)、デバッガーでコードをステップ実行してもエラーがスローされません。
IDEが作成したフォームロード関数(_Handles MyBase.Load
_署名サフィックスが付いています)にブレークポイントを設定していますが、ブレークポイントに到達せず、フォームが表示されて機能します。
フォームにはコンストラクタで3つの引数が渡されますが、IntializeComponent()
関数は、他の処理が行われる前に呼び出されます。
コード:
_Public Sub New(ByVal argA As Object, ByVal argB As Object, ByVal mode As FormMode)
' This call is required by the Windows Form Designer.
InitializeComponent()
' Other code here,
' No errors generated
'
End Sub
_
フォームロード関数は次のとおりです(ただし、イベントが発生しないため、実際には実行されません)。
コード:
_Private Sub frmInstrumentEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not argA Is Nothing Then ' argA set in constructor
' Operations using argA
End If
End Sub
_
いくつかのコントロールとargA
オブジェクトでいくつかのデータバインディングを使用していると追加する場合がありますが、これがエラーを生成している場合、私はこれを見たと思います(デバッガー>例外ウィンドウでCLR実行設定をThownに設定しています) )
なぜこれが起こっているのでしょうか?
私は同様の問題を抱えていました(それはShown
ではなくLoad
イベントにありましたが、根本的な原因は同じです)。理由は祖先の1つに深く隠されていました-未処理のNullReferenceException
がスローされ、この例外はどういうわけか「ミュート」されていました。
F11を使用した広範囲にわたるデバッグの後にそれを見つけました。
しかし...この答えを書いているとき、私はこれを見つけました SOへの投稿
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
メソッドにMain()
を追加するだけです。
64ビットマシンを使用している場合は、ソリューションが提供されます(私の場合も機能しました)。
同様の問題がありました。フォームを初めて開いたときは、ロードイベントはトリガーされませんが、2回目に開いたときは問題ありません。問題は、データベースから削除したフィールドにバインドされているテキストボックスの1つであることが判明しました(SQLサーバー-かなり標準的な方法でデータセット、テーブルアダプター、バインディングソースを使用していました)。
データバインドされているフォーム上のすべてのコントロールにデータセット内に存在するフィールドがあり、データセットが基になるデータベーステーブルを正確に反映していることを確認します(この最後のビットを実行するのが最も簡単だったのは、データソースウィンドウ(メニュー-data-データソースを表示)の[ウィザード]ボタンをクリックし、テーブルを削除します。次に、それを再度使用してテーブルを追加します。これにより、すべてのデータが一致するようになります。
お役に立てれば。
OK私は同じ問題を抱えていました(私はそう思います)と、ここでの手がかりが助けになりました。それは(一種の)データバインディングでした
設定にバインドされたいくつかのコントロールのプロパティがあり、これらの設定を削除すると、フォームロードイベントが実行を停止しました。バインディングを削除し、再び実行されます。
同様の問題がありましたが、問題はデータバインディングの誤りでした。データバインディングのコードを省略して、試してみてください。ロードイベントハンドラーがヒットすると思います。次に、データバインディング部分の何が問題かを確認します。
解決しました..。
4時間を費やして、ついにこの答えから手がかりを得ました。私の場合、フォームにいくつかのTextBoxコントロールがそれぞれの列を持つBindingSourceにバインドされていましたが、フォームにはまだそのbindingsourceがありますが、基になるデータベーステーブルから1つの列を削除したため、フォームにはまだ1つありますTextBoxはbindingsourceを使用してその列を指して存在しますが、実際に削除したのでそのような列はありません!.....このリードForm.loadイベントが発生していなかった........最終的には修正されました。
あなた方全員に感謝します ..
同じ問題があった。データバインディングを確認したところ、すべて問題ないように見えました。フォームが閉じられていても、.NETが確かではなかったと考えました(昔は、フォームが非表示になっていて、実際には閉じられていなかったことがあります)。
イベントハンドラーFormClosedを追加して、1行挿入しました。
Private Sub frmScheduleInquiry_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
End Sub
問題が解決しました!
ここに別のアイデアがあります。
(CLRだけでなく)すべての例外タイプを、ユーザーが処理しない代わりにスローするように設定するとどうなりますか。アプリケーションはどこかで壊れますか?
また、再確認するために、デバッグモードになっていますか?
あなたのウィンドウフォームはベースページを継承していますか?もしそうなら、ベースページはおそらくフォームロードイベントハンドラも持っています。その基本ページのForm Loadイベントハンドラーで、スローされている例外を見つけます。したがって、ベースページフォームロードイベントハンドラーを終了し、継承されたウィンドウフォームでフォームロードイベントハンドラーを起動していません。
発生している問題は、「その他のコード」を実行する前に、アプリケーションがフォームを完全にロードする必要があることが原因である可能性があります。これは、読み込みが完了していないフォーム上のオブジェクトを処理する他のコードが原因である可能性があります。ロード機能で有効になるタイマーを使用して、他のコードを実行できます。このようにすると、タイミングの問題が発生せず、最初にフォームをロードしてから、後で2番目に分割して、タイマーから必要なコードを実行できます。
まったく同じ問題が発生しました。いくつかのApplicationsSettingsプロパティをフォームのTextBoxコントロールに追加したことがわかりましたが、後でそれらを削除したいと考えました。私はthoughtすべてをクリアしましたが、明らかにクリアしませんでした。これがForm_Load()(および他のイベントも同様)を起動させなかった原因です。問題のあるTextBoxを削除してから再度追加することでうまくいきました。
お役に立てれば
マットはおそらくこれについて正しいでしょう。次のようにコードを調整してみましたか?
Private Sub frmInstrumentEditor_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not argA Is Nothing Then ' argA set in constructor
' Operations using argA
Else
MessageBox.Show("argA has not been set")
End If
End Sub
メッセージボックスが表示される場合は、引数が初期化される前にイベントが発生したことを意味します。フォームを閉じる/開くことに関する「奇妙な」動作も説明します。
「Shown」イベントでargA操作を実行してみましたか?
私はこれが古い投稿であることを知っていますが、誰かがこの問題を検索している場合は、この問題に対する私の修正が役立つかもしれないと思いました。
最初に投稿した質問で述べたのと同じ問題がありましたが、フォームにデータバインドフィールドがありませんでした。問題は、私がCurrentDeployment.CurrentVersion
メソッドを使用していて、それがサイレント問題の原因であることが原因であることがわかりました。アプリケーションをデバッグモードからリリースに設定しましたが、問題はまだ存在していました。試行錯誤を繰り返しながら、定義方法Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
とプレストを書き直しました。これで通常どおり機能します。
元のコードを以下のコードに変更してしまいました。
Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
sysVersion = String.Format("{0}.{1}{2}.{3}", xVersion.Major, xVersion.Minor, xVersion.Build, xVersion.Revision)
新しいコード
#If (DEBUG) Then
sysVersion = "[Debug mode]"
#Else
Dim xVersion As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
sysVersion = String.Format("{0}.{1}{2}.{3}", xVersion.Major, xVersion.Minor, xVersion.Build, xVersion.Revision)
#End If
これが誰かの役に立つことを願っています。ハッピーコーディング...
一連の古いアセンブリ(.NET 2.0; .NET 1.1)をロードした.NET 4.0 WinFormsアプリケーションをビルドして実行したときに、この症状が発生しました。
過去に、これが混合モードのアセンブリ例外を引き起こすのを見ました。この特定のケースでは、メインフォームは例外なく読み込まれ、そのフォームロードコードは実行されません。
私の場合、解決策はuseLegacyV2RuntimeActivationPolicy="true"
をApp.configドキュメントに追加します。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
IDE=の上部にある[ソリューション構成]ボックスに「デバッグ」と表示されていることを確認してください。「リリース」と表示されている場合、「ロード」メソッドがデバッガーによってキャプチャされていないことがわかりました。
これが役立つかどうかはわかりませんが、誰かが誤ってHandles Me.Loadを削除したため、この問題が発生しました。 MyBase.LoadがMe.Loadに変更してみてください。
同じ問題、私はデザイナーを書き直し、それを修正しました。デザイナーがロードしてからクラッシュしましたが(当然ながら無音)、form_loadが原因で起動していませんでした。
同じ問題がありましたが、原因はまったく異なりました。フォームはform.ShowDialog()ではなくform.Show()を使用して表示されていました
同様の問題がありました。フォームでShowメソッドを使用しておらず、代わりにuser32.dll ShowWindow呼び出しを使用していることがわかりました。つまり、フォームはまだ表示されていますが、dotNet Showメソッドが呼び出されなかったため、Loadイベントは発生しませんでした。