投稿者 魔界の仮面弁士  (社会人) 投稿日時 2019/3/4 12:23:34
> これを動作させるとチェックボックスのCheckedChangedイベントで
> 「オブジェクト参照がオブジェクトインスタンスに設定されていません」というエラーが出ます。
NullReferenceException というやつですね。
どのオブジェクトの参照が無いと言われていますか?


> フォームが開く前にCheckedChangedイベントが動いてしまっていて、
デザイン時に Checked プロパティを True にした場合、Load イベント発生前
(InitializeComponent メソッド呼び出し時)にイベントが呼び出されます。

このタイミングでは、CheckBox1 や Label1 等の各種コントロールは
既に生成されていますが、それらはまだフォームに貼り終える前であるため、
Me.Controls 等からのコントロール取得は行えない可能性があります。
TabControl を使っている場合は特に注意。


> これは正しいやり方なのでしょうか?

手順的にはそれで良いと思いますが、"load_flg" という名前だと、
True と False がそれぞれ何を意味しているかが後で見た時に分かりにくいので、私なら
 「Private IsLoaded As Boolean = False」 … ロードされたら Fasel → True となる
 「Private Initializing As Boolean = True」 … 初期化処理が終わった時に True → False となる
のように、True/False の意味を想像しやすい変数名にします。


あるいは、エラーの要因となっているオブジェクトが明らかである場合は、
そのオブジェクトを利用する前に、
 If 何某 IsNot Nothing Then
のような判定処理を入れるという対策もあります。

あとは、WithEvents を使わず、OnLoad メソッドや Load イベントにて
AddHandler するという手もありますが、今回のケースではフラグ判定で良いと思います。