1

この質問で私の間違いを受け入れる方が良いです。私は物事を台無しにしたので、私はこの問題を抱えていました。ご迷惑をおかけして申し訳ありません...

string name = ((DateTimePicker)sender).Name.ToString();
        name = name.Substring(0, name.Length - 1);
        name = name + "4";
        TimeSpan duration = new TimeSpan();
        duration = ((DateTimePicker)sender).Value - ((DateTimePicker)panel2.Controls[name]).Value;
        name = name.Substring(0, name.Length - 1);
        name = name + "6";
        ((MaskedTextBox)panel2.Controls[name]).Text = duration.ToString();

実行時に、オブジェクトのインスタンスに設定されていないオブジェクト参照が表示されます。同様の機能が他の場所で使用されていますが、ここで再初期化する必要があるものを見つけることができません:$

代替テキストhttp://www.freeimagehosting.net/uploads/735eefb5db.jpg

datetimepickerのキャストは問題ありません。datetiempickerの名前を取得して、フォーム内の行を識別し、その前にピッカーを使用して差を計算し、その差を、名前を使用して作成したコントロールのマスクされたテキストボックスに出力する必要があります。 2つのdatetimepickerの名前ですが、エラー行のコントロールにアクセスすると、このメッセージが表示されます。

4

2 に答える 2

4

たくさん...

String.Format()を使用して、これを少し明確にします。これにStringBuilderを使用しなくても構いませんが、何をしようとしているのかを理解するのは非常に困難です。

また、

(DateTimePicker)sender 

繰り返さないでください。一度キャストし、キャストしたオブジェクトを再利用します。

DateTimePicker _castObject = (DateTimePicker)sender;

obj not refエラーは、これらのオブジェクトのいずれかにある可能性があります。ステップスルーするか、防御的なステートメント(以下)を追加しない限り、それを理解するのにかなりの時間がかかるでしょう。

if (sender == null)
{ throw new ArgumentNullException("sender", "sender is null");}

これがフォームの標準のイベントハンドラーで発生している場合は、次のようになります(VBを失礼します、メモリからc#を実行することはできなくなりました)。

Protected Function btnOK_Click(sender as Object, e as EventArgs) Handles btnOK.Click
 'your code'
End Function

似たようなものが表示された場合、フォームにオブジェクトをキャストする理由はありません。コントロール名(btnOK、txtMaskedTextBoxなど)でアクセスするだけです。

あなたはここでまったく間違った方法で何かをしているようです。おそらく、この特定の例外ではなく、解決しようとしている実際の問題を説明することから始める必要があります。「薄い金属定規」を参照してください。

于 2010-05-14T13:47:35.860 に答える
0

「名前」を正しく作成し、その名前のコントロールが存在することを確認してください。そして、そのpanel2はnullではありません。

于 2010-05-14T13:55:18.067 に答える