他クラスからForm1内コントロルの操作方法を教えて(C#プログラミング)
Form1で定義してあるtextBox1のText値を他クラスから操作したいのですが、そのコーディング要領が判らず困っております。どなたか教えてくださいませんか?
我流で下記の様なソース(要点のみ記述、他は省略)を作ってみましたが、コンパイルエラー「'object' に 'textBox1' の定義が含まれておらず、型 'object' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。」がでます。
このエラーメッセージの意味を理解できず、何故Form1オブジェクトが伝わらないのか判らず、どこをどう直せばよいのか途方に呉れております。
以下我流C#ソースの抜粋
delegate void SetTextCallback(string text);
public class Form1 {
通常のForm内コントロールの定義
Object formobj = this;
AAAclass aaa = new AAAclass (formobj);
この後Aclass内の基幹メソッドを走らせる
}
public class AAAclass {
private Object formObject = null;
public AAAclass(Object formobj) {
formObject = formobj;
様々な初期化処理
}
private void textDisplay(string text) {
if (formObject.textBox1.InvokeRequired){ //この行の"textBox1"部分がエラー
SetTextCallback d = new SetTextCallback(textDisplay);
formObject.Invoke(d, new object[] { text }); //この行の"Invoke"部分がエラー
}
else {
formObject.textBox1.Text = text; //この行の"textBox1"部分がエラー
}
}
この後、複数のスレッドを定義し、走らせている
それらのスレッドで上記の共通テキスト表示メソッドを利用している
}
No.1
- 回答日時:
Form1内のtextBox1の定義はどうなっていますか?
通常のFormデザイナで構築した場合、Form内のコントロールはすべてprivateで宣言されているので、Formの外からはアクセスできません。
原因がprivateならpublicに変えれば済む話ですが、ここを弄るのはプログラミングの作法上良いとは思えません。一般的にはForm1の中でコントロールにアクセス処理を行うメソッドを定義し、これをpublic宣言して外部から呼び出すようにするのがスマートなやり方です。
この回答への補足
他クラスから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"部分がエラー
}
No.2ベストアンサー
- 回答日時:
>> formObject.textDisplay(text) //この行の"textDisplay"部分がエラー
formObjectがObjectの参照型なので、textDisplayなんてメンバが無いからエラーになっているのです。Form1の参照だとコンパイラが分からないとエラーになります。
((Form1)formObject).textDisplay(text)
のようにキャストで正しい型を示すか、最初からformObjectをForm1の参照型として作っておくかすればOKだと思います。
度重なる幼稚な質問にご丁寧なお答えを頂きまして誠にありがとうございました。ご指摘の様にキャストすることで無事にコンパイルをパスすることができました。C#を始めてから3ヶ月くらいで知識としてキャスト機能は知っていたのですが、全く応用能力が欠けており思い付きませんでした。恥ずかしく思っております。今後も何かとご迷惑な質問をするかも知れませんが、どうかその折にはよろしくお願いもうしあげます。本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
CloseとDisposeの違い
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
C#にて別クラスの関数を使いたい
C言語・C++・C#
-
-
4
C#でほかのファイルにある自作クラスを使用したい場合
その他(プログラミング・Web制作)
-
5
C#で角が丸いテキストボックス
その他(プログラミング・Web制作)
-
6
ROWNUMでUPDATEをしたいのですが・・・。
Oracle
-
7
変数の前のビックリマークについて!
PHP
-
8
Labelコントロールに数字を代入する
C言語・C++・C#
-
9
フォームの存在をチェックする方法
Visual Basic(VBA)
-
10
C# dataGridViewの値だけクリア
C言語・C++・C#
-
11
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
12
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
-
13
C#のループでtextboxに値を入れる方法
C言語・C++・C#
-
14
c#でTextBoxの入力制限
C言語・C++・C#
-
15
C# Listを使わずに2次元配列の動的確保をしたいです。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォートランのエラーについて...
-
フォートランでの記述に関して
-
C2065: 'EnumDisplayDevices' :...
-
DLL内からの外部変数の参照
-
AccessVBAでVLookupを使いたい
-
#ifndefとかヘッダファイルにつ...
-
対応する関数ヘッダーがありません
-
Excel VABについて 下記記述が...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
エクセル関数を教えてください
-
UserForm1.Showでエラーになり...
-
Excel・Word リサーチ機能を無...
-
ExcelのVBA。public変数の値が...
-
メッセージボックスのOKボタ...
-
エクセルVBA 「On Error GoTo...
-
Excelのマクロでワードのテキス...
-
教えて下さい
-
2つのマクロでチェックボックス...
-
ACCESS VBAのSplit()関数の使用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
intel fortranのエラーで困って...
-
Excel VABについて 下記記述が...
-
フォートランのエラーについて...
-
pythonの条件分岐(if)
-
対応する関数ヘッダーがありません
-
43:syntax error at end of input
-
Excel VBA: UserForm.Show で実...
-
フォートラン(fortran)のエラー...
-
#ifndefとかヘッダファイルにつ...
-
Delphiでif文がうまく書けないです
-
AccessVBAでVLookupを使いたい
-
typedef による2重定義
-
構造体のポインタ参照
-
C言語のプログラムが実行できま...
-
DLLの使い方とerror C2146につ...
-
VB2005でOCXを動的に呼び出すに...
-
解説サイトに従ったfortran並列...
-
Makefile と <math.h>
-
python numpy.linalg.inv()での...
おすすめ情報