
お世話になります。
.NET C#で開発をしている初心者です。
親Form1のReadOnlyにしているtextBox1をダブルクリックしたら、子Form2が表れ、
その中で、ラジオボタンなどで各項目を選択する様になっており、選択した結果の
文字列が、子Form2のReadOnlyにしているtextBox1に表示され、これで良ければ、
決定ボタンであるButton1を押すと、子Form2が閉じられ、元の親Form1のReadOnly
にしているtextBox1に子Form2で決定した文字列が表示される様にしたいのですが、
私がやってうまく行かないのは、子Form2で決定した文字列をClassでsetし、親Form1
に制御が移った時に、classからgetしようとしたのですが、
まず、子Form2が閉じられた時、親Form1はtextBox1にダブルクリックしたままの(後の)
状態、つまりカーソルが残ってる状態で、文字列が表示されない。
子Form2が閉じられた時すぐかもしくは、子Form2の決定ボタンであるButton1を押した
時すぐに親Form1のtextBox1に文字列が表示されていて欲しいのですが、その方法が
分からないので、とりあえず、親Form1のtextBox1のLeaveイベントを発生させて文字列
を表示しています。
どなたかご親切な方、ご教授下さいます様、宜しくお願い申し上げます。
No.11ベストアンサー
- 回答日時:
あー、すみません、そこ間違ってました。
親フォームの「オブジェクト」が必要なので、こんな感じになります。
便宜上、親フォームのクラス名をparentForm、子フォームのクラス名をchildFormとしますので適宜読み替えてください。
子フォーム側:
class childForm
{
...
parentForm parent; // 親フォームの参照
public void setParent(parentForm parent)
{
// 親フォームから参照を受け取って保持する
this.parent = parent;
}
...
{
// 親フォームの関数を呼び出す
parent.ctlFromChild("文字列");
}
...
}
親フォーム側:
class parentForm
{
...
childForm child;
{
child = new childForm(); // 子フォーム作成
// 子フォームに自分のオブジェクト参照を渡す
child.setParent(this);
}
...
}
本当はコールバック関数をデリゲートで渡してやる方が筋はいいと思うんですが、今回はこれでOKかと。
上記では親フォームのオブジェクトを登録する関数を作っていますが、コンストラクタで実装してもOKです。
あと、申し訳ないのですがこれは動作試験してないので、これで駄目なら上記の「コールバック関数をデリゲートで渡す」方を紹介します。
長い間この初心者の私にお付き合い下さり、
誠に感謝致します。
おかげさまで、
>// 親フォームの関数を呼び出す
> parent.ctlFromChild("文字列");
部分を
parent.changeTaxtBo1("文字列");
に変えたらエラーが解消され、
子フォームのテキストボックスに書いた文字列が、
親フォームのテキストボックスに反映される事が
出来ました。
ただThreadや、Invokeなどの意味はまだ今一分からない
のでゆっくり勉強しようと思います。
本当に有難うございました。
今後とも宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
(Excel+VBA)ユーザーフォームの...
-
VBAでユーザーフォームを再表示...
-
Microsoft Formsの「個人情報や...
-
モーダルフォームとモードレス...
-
ACCESSのフォーム、開くんです...
-
VB.NETでフォームロード中のエ...
-
Excel VBAでユーザーフォームだ...
-
VBA(エクセル)のユーザー...
-
VBAのテキストフォームの折り返...
-
子フォームでDB更新後、親フォ...
-
アクセスのUserFormにはInitial...
-
Accessのフォームでレコード移...
-
Form_Load と Form_Activate の...
-
パソコンの画面に合わせてユー...
-
フォームの二重起動の阻止
-
クリックイベントなのに、2回ク...
-
フォームウィンドウを最前面に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
Microsoft Formsの「個人情報や...
-
Form_Load と Form_Activate の...
-
ユーザーフォーム上に現在日時...
-
VB.NETでフォームロード中のエ...
-
Hideについて(.NET)
-
Excelにて、ユーザーフォームで...
-
VBAでユーザーフォームを再表示...
-
VBAのテキストフォームの折り返...
-
モーダルフォームとモードレス...
-
ユーザーフォームのラベルに時...
-
VBA(エクセル)のユーザー...
-
コントロールの存在確認
-
エクセルVBAのフォームを最...
-
ACCESSのフォーム、開くんです...
-
Accessで、一つのフォーム画面...
-
【VBAユーザーフォームで閉じる...
-
パソコンの画面に合わせてユー...
おすすめ情報