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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

5回答

27981閲覧

.NETでLoadイベントが読み込まれない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2016/06/23 07:19

###前提・実現したいこと
C#を使用しています。フォームを読み込んだ時にインスタンスを作成したいです。

###該当のソースコード

c#

1//------------------------------------------------------------------------------ 2// コンストラクタ 3//------------------------------------------------------------------------------ 4public frmMstTorihiki() 5{ 6 InitializeComponent(); 7} 8 9//------------------------------------------------------------------------------ 10// フォーム_ロード時 11//------------------------------------------------------------------------------ 12private void frmMstTorihiki_Load(object sender, EventArgs e) 13{ 14 // DBアクセスオブジェクト作成 15 objDBTorihiki = new clsDBTorihiki(); 16} 17

イメージ説明

###発生している問題
ブレークポイントで処理を追ったところ、コンストラクタの部分までは読み込んでいるのですが、
Loadイベントを読み込まずに画面だけ表示して処理が終わってしまいます。

他に複数作成した画面ではLoadイベントは読み込まれており、
インスタンスを作成するタイミングも他の画面と統一したものとしたいです。

###試したこと。
他に作成した画面と処理の流れを比べてみましたがLoadイベントの前までは同じように動作しており、
また、ほかに作成した画面のファイルとコードのDiffを確認しても名称以外の違いはありませんでした。

Loadが読み込まれない原因がわからないのでよろしくお願いします。

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

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

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

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

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

Tak1wa

2016/06/24 00:15

みなさん再現が取れないようなので簡単な再現プロジェクトをアップロードされては如何でしょうか。
guest

回答5

0

ベストアンサー

private void frmMstTorihiki_Load(object sender, EventArgs e)
{
try{
// DBアクセスオブジェクト作成
objDBTorihiki = new clsDBTorihiki();
Catch ex As Exception
MessageBox(ex.Message);
End Try
}

処理を見てみるのもいいかもですね。
もしかしたら処理の途中でエラーになっているのかもしれません。

もしくはForm のLoad イベント名と実行されているイベント名が
違うとか。

投稿2016/06/23 08:02

YK1037

総合スコア236

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

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

退会済みユーザー

退会済みユーザー

2016/06/23 10:51

try{ // DBアクセスオブジェクト作成 objDBTorihiki = new clsDBTorihiki(); }catch(Exception ex){ MessageBox.Show(ex.Message); } 上記のようにコードを書いてみたのですが、Loadイベントが起きていない為実行されませんでした。 イベント名も 右クリックして、全ての参照を検索(A)とすると、設定しているイベントを参照したので、イベント名が違うということもなさそうです。
YK1037

2016/06/23 12:29

んー! 他の方の意見も見てみると、 なかなか難しい問題ですね プロパティのイベントで ロードが設定してある かつ 名前も一緒となると・・! ロードイベントを設定し直すというのはどうでしょうかね?
退会済みユーザー

退会済みユーザー

2016/06/24 00:26

ありがとうございます! フォームを1から作成しなおして、ロードイベントをそこで設定し直すと解決できました!
YK1037

2016/06/24 02:11

解決してよかったです!
guest

0

自分の環境だと再現しないけど

C# Web Browser Control blocks parent's Load event

フォームへのイベント追加より前に 親のonloadを呼ぶようなコントロールを貼ってるとか?

投稿2016/06/23 09:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/06/23 11:06

リンクありがとうございます、Web Browserコントロールを使用していないため、他に原因となるような部品などありますでしょうか?
guest

0

# Handles とかなくて良いんだっけ・・・と思ったけど C# はいらないんでしたっけね

↓ この辺とか関係ないですか?
http://dobon.net/vb/dotnet/help/eventhandler.html

C#で使用するには、イベントハンドラをイベントに関連付ける必要があります。

外していたらすみません。


【追記】

っと、添付されてる画像を見ると設定されてそうですね・・・?
すみません、スルーしてください。

投稿2016/06/23 08:06

編集2016/06/23 08:09
sk_3122

総合スコア1126

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

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

0

(該当フォーム).Designer.csを覗いて、
Loadイベントを登録している部分(多分this.Load+=...)
が存在するかを確認

登録部分よりOnLoad()が先に実行されちゃってないか
InitializeCompornent()内をステップ実行して確認:参考

投稿2016/06/23 08:01

ozwk

総合スコア13512

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

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

退会済みユーザー

退会済みユーザー

2016/06/23 10:41

Loadイベントを登録している部分の存在は確認できました。 this.Load += new System.EventHandler(this.frmMstTorihiki_Load); すみません、OnLoad()といったものが正直よくわからないですが、 ソリューション全体をOnLoadで検索してもヒットしなかったため、おそらく実行されていないと思います。
ozwk

2016/06/23 11:11

Formを継承していると思いますが そいつのOnLoadです。
guest

0

Loadイベントは、インスタンス作成時ではなく、フォームがはじめてロードされた時に呼びだされます。

投稿2016/06/23 07:32

jm1156

総合スコア866

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

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

退会済みユーザー

退会済みユーザー

2016/06/23 07:59 編集

回答ありがとうございます。ブレークポイントで処理を追って、フォームを表示したときでもfrmMstTorihiki_Loadの処理を実行してくれないのですが、 その場合はフォームが初めてロードされた時、とは違うのでしょうか?
jm1156

2016/06/23 08:01

それだとLoadイベントがおきるはずですね・・・。 フォームを表示している部分のソースはどうなっていますでしょうか? フォームロード時のイベントは↓こちらにありますので参考になれば。 https://msdn.microsoft.com/ja-jp/library/86faxx0d(v=vs.110).aspx 各イベントに、ブレークポイントではなく、 Console.WriteLine( "ロード" ); などを入れて、一つずつ正しくイベントが発生しているかを確認してみてください。
退会済みユーザー

退会済みユーザー

2016/06/23 10:39

フォームを表示している分のイベントハンドラのソースは以下のようになっています。 this.Load += new System.EventHandler(this.frmMstTorihiki_Load); Console.WriteLine( "ロード" ); といったものを入れて、確認してみましたが、やはりLoadされたときの処理は行われていないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問