|
分類:[C#]
はじめまして、最近になってVBのみしか扱えないという危機感に陥っているものですorz 今回基本的なDLL呼び出しやAPIコールの仕方などを復習してきたのですが、基本となるフォーム上のコントロールの操作 (TextBlock.Text)の変更がわかりません! VBで同じようなプログラムを書くと簡単にプロパティ変更できるのですが、C#では例外が発生してしまいます。 |System.NullReferenceException はユーザー コードによってハンドルされませんでした。 |Message="オブジェクト参照がオブジェクト インスタンスに設定されていません。" 確かにデバック中に他のコントロールはSystemから呼び出されているのにTextBlockだけnullとなっています。
エラーとなるのは「TB_TextChanged」というイベントをフォーム上の2つのテキストボックス「TB_x,TB_y」がテキストチェンジで起こすことにしています。 その中でTextBlockのプロパティを変更しようとするとこのような例外が発生します。 TextBlockの代わりに違うコントロールを入れて見ても例外が起こるので、 コントロールやプロパティの呼び出しの方法ではなくC#のメソッドのルールに沿っていないのだとわかりました。
どのような方法でこの例外を回避するのかをご伝授ください。
コード private void TB_TextChanged(object sender, TextChangedEventArgs e) { TextBox textbox = (TextBox)e.Source; Accessor accessor = new Accessor(); string anther; int add, mul; if (TB_x != null && TB_y != null)//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ { accessor.Test = textbox.Text; if (TB_x.Text != "" && TB_y.Text != "") { //DLL add = AddClass.Add(Convert.ToInt16(TB_x.Text), Convert.ToInt16(TB_y.Text)); mul = MultiplyClass.Multiply(Convert.ToInt16(TB_x.Text), Convert.ToInt16(TB_y.Text));
anther = ("P_key/Content=" + textbox.Text + "|" + textbox.Name + "\n" + "コントロール" + textbox.Name + "Sin()=" + accessor.Test + "\n" + "DLL:" + "ADD(TB_x,TB_y)" + Convert.ToString(add) + "\n" + "DLL:" + "MUL(TB_x,TB_y)" + Convert.ToString(mul));
System.Diagnostics.Debug.Print("****************************************\n"+anther); TB_A.Text = anther;//EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE } } }
このようなコードで//EEE…の部分でエラーが起きます。 代わりに「if (TB_A != null) { TB_A.Text = anther; }」ではエラーが起きない代わりにテキストボックスをマウスでクリックしてテキスト変更することができなくなりました。(タブキーでフォーカスを持って行っての変更は可能、動作が変更可能となったラベルっぽい) そのためこのIF文「//@@@…」の使い方とプロパティ呼び出しの方法が間違っていると考えています。 なぜこのようになるか参考になるものでも結構です。 よろしくお願いします。
|