• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:他クラスからForm1内コントロルの操作方法を教えて(C#プログラミン)

他クラスからForm1内コントロールの操作方法を教えて(C#プログラミング)

このQ&Aのポイント
  • Form1で定義してあるtextBox1のText値を他クラスから操作する方法について教えてください。
  • 下記のようなソースコードを作成しましたが、コンパイルエラーが発生しています。
  • エラーメッセージの意味が理解できずに困っています。どこを修正すればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>> formObject.textDisplay(text) //この行の"textDisplay"部分がエラー formObjectがObjectの参照型なので、textDisplayなんてメンバが無いからエラーになっているのです。Form1の参照だとコンパイラが分からないとエラーになります。 ((Form1)formObject).textDisplay(text) のようにキャストで正しい型を示すか、最初からformObjectをForm1の参照型として作っておくかすればOKだと思います。

wumeda
質問者

お礼

度重なる幼稚な質問にご丁寧なお答えを頂きまして誠にありがとうございました。ご指摘の様にキャストすることで無事にコンパイルをパスすることができました。C#を始めてから3ヶ月くらいで知識としてキャスト機能は知っていたのですが、全く応用能力が欠けており思い付きませんでした。恥ずかしく思っております。今後も何かとご迷惑な質問をするかも知れませんが、どうかその折にはよろしくお願いもうしあげます。本当にありがとうございました。

その他の回答 (1)

回答No.1

Form1内のtextBox1の定義はどうなっていますか? 通常のFormデザイナで構築した場合、Form内のコントロールはすべてprivateで宣言されているので、Formの外からはアクセスできません。 原因がprivateならpublicに変えれば済む話ですが、ここを弄るのはプログラミングの作法上良いとは思えません。一般的にはForm1の中でコントロールにアクセス処理を行うメソッドを定義し、これをpublic宣言して外部から呼び出すようにするのがスマートなやり方です。

wumeda
質問者

補足

他クラスからForm1内コントロルの操作方法を教えて 早速のご回答ありがとうございます。ご回答の趣旨は良く理解できましたので、下記のように変更してみました。しかしながら、クラスForm1のオブジェクトの伝達方法が拙くて、メソッド呼出文で同じコンパイルエラーが発生しまいます。どこで間違えてしまっているのでしょうか? delegate void SetTextCallback(string text); public class Form1 {   通常のForm内コントロールの定義   textBox1のアクセス修飾子はprivateのままとし   メソッド"textDisplay"はForm1内に写し、オブジェクト部を"this"に変更 public void textDisplay(string text) { if (this.textBox1.InvokeRequired){ SetTextCallback d = new SetTextCallback(textDisplay); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; }   } Object formobj = this;   AAAclass aaa = new AAAclass (formobj);   この後AAAclass内の基幹メソッドを走らせる } public class AAAclass { private Object formObject = null; public AAAclass(Object formobj) { formObject = formobj;    様々な初期化処理 } この後、複数のスレッドを定義し、走らせている   それらのスレッドでForm1内の共通テキスト表示メソッドを下記要領で利用 formObject.textDisplay(text) //この行の"textDisplay"部分がエラー }

関連するQ&A