C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: MDI親フォームのクラスから子フォーム値の変更はできますか?


(過去ログ 55 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■31319 / inTopicNo.1)  MDI親フォームのクラスから子フォーム値の変更はできますか?
  
□投稿者/ tamaboyo (19回)-(2009/01/20(Tue) 14:47:40)

分類:[C#] 

tamaboyoです。
宜しくお願いします。

コピー、貼り付け等の編集を行うクラスCEditを用意し、これをMDI親フォームで宣言しました。
実際編集するデータがあるのは子フォームのGridコントロールです。
親フォームから[コピー]等の編集機能が呼ばれた際にCEditクラスに子フォームの情報を渡して編集を行いたいのです。

親フォームでアクティブな子フォームを
Form cForm = this.ActiveMdiChild;
で取得できましたので、このcFormを親フォームで宣言したCEditクラスに渡しました。
が、CEditクラス内で、子フォーム上のGridコントロールにアクセスができません。
Gridのデータを取得する部分のコードで、コントロール未定義のエラーになります。

Form型を渡すだけでは子フォームを扱うことはできないのでしょうか?
それとも、Form型を渡してはいけないのでしょうか?

環境はVS2005です。
宜しくお願いします。
引用返信 編集キー/
■31323 / inTopicNo.2)  Re[1]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ επιστημη (1546回)-(2009/01/20(Tue) 14:50:35)
επιστημη さんの Web サイト
> 親フォームでアクティブな子フォームを
> Form cForm = this.ActiveMdiChild;
> で取得できましたので、このcFormを親フォームで宣言したCEditクラスに渡しました。
> が、CEditクラス内で、子フォーム上のGridコントロールにアクセスができません。
> Gridのデータを取得する部分のコードで、コントロール未定義のエラーになります。

呼び出したいメソッド/プロパティはちゃんとpublicになってますか?

引用返信 編集キー/
■31344 / inTopicNo.3)  Re[2]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ tamaboyo (21回)-(2009/01/20(Tue) 16:28:39)
No31323 (επιστημη さん) に返信

επιστημη さん ありがとうございます。

>>親フォームでアクティブな子フォームを
>>Form cForm = this.ActiveMdiChild;
>>で取得できましたので、このcFormを親フォームで宣言したCEditクラスに渡しました。
>>が、CEditクラス内で、子フォーム上のGridコントロールにアクセスができません。
>>Gridのデータを取得する部分のコードで、コントロール未定義のエラーになります。
>
> 呼び出したいメソッド/プロパティはちゃんとpublicになってますか?

Gridコントロールの宣言はpublicにしています。
子フォームclassのFormChildもpublicです。


気になることがあるのですが。。。
子フォームはForm型をベースにして作成しているのですが、もともとのForm型にはコントロールはありません。
はじめは、子フォーム型で渡せばいいと思ったのですが、
それだとCEditクラスの中の関数の引数の型としての宣言ができませんでした。
受け取り側の引数が子フォーム型になっていないと受け取れないのでは?と思ったのは間違いなのでしょうか?

とても初歩的な疑問で申し訳ありません。
宜しくお願いします。
引用返信 編集キー/
■31346 / inTopicNo.4)  Re[3]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ επιστημη (1551回)-(2009/01/20(Tue) 16:33:49)
επιστημη さんの Web サイト
No31344 (tamaboyo さん) に返信
> 子フォームはForm型をベースにして作成しているのですが、もともとのForm型にはコントロールはありません。
> はじめは、子フォーム型で渡せばいいと思ったのですが、
> それだとCEditクラスの中の関数の引数の型としての宣言ができませんでした。
> 受け取り側の引数が子フォーム型になっていないと受け取れないのでは?と思ったのは間違いなのでしょうか?

FormChild cForm = this.ActiveMdiChild as FormChild;
// ここに cForm != null のチェックしたほがいーかな?
cForm.なにかする();

ではダメですか?

引用返信 編集キー/
■31354 / inTopicNo.5)  Re[4]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ tamaboyo (23回)-(2009/01/20(Tue) 17:15:27)
No31346 (επιστημη さん) に返信

επιστημη さん、ありがとうございます。

> ■No31344 (tamaboyo さん) に返信
>>子フォームはForm型をベースにして作成しているのですが、もともとのForm型にはコントロールはありません。
>>はじめは、子フォーム型で渡せばいいと思ったのですが、
>>それだとCEditクラスの中の関数の引数の型としての宣言ができませんでした。
>>受け取り側の引数が子フォーム型になっていないと受け取れないのでは?と思ったのは間違いなのでしょうか?
>
> FormChild cForm = this.ActiveMdiChild as FormChild;
> // ここに cForm != null のチェックしたほがいーかな?
> cForm.なにかする();
>
> ではダメですか?

これはFormChildクラスにコピー等の編集機能を持たせるということでしょうか?

FormChild クラスの中で編集機能を持たせることを考えたのですが、これだと子フォームを複数開いた場合に、
データのやり取りができなくなると思ったので、編集用のクラスを別に準備して、そこでデータ加工を行おうと思ったのですが・・・
データ保管領域だけ共通にして、編集機能は子フォームに持たせた方が管理がしやすいのでしょうか?

引用返信 編集キー/
■31355 / inTopicNo.6)  Re[5]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ επιστημη (1554回)-(2009/01/20(Tue) 17:20:09)
επιστημη さんの Web サイト
> これはFormChildクラスにコピー等の編集機能を持たせるということでしょうか?

そんな話はしてません。お好きにどうぞ。

「型がFormのままではFormChildのメソッド/プロパティが使えない」
ってことだったので、
「ならば適切にcastしてはいかが?」
と提案しています。

引用返信 編集キー/
■31358 / inTopicNo.7)  Re[6]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ tamaboyo (24回)-(2009/01/20(Tue) 17:54:07)
No31355 (επιστημη さん) に返信

επιστημη さん、ありがとうございます。

>>これはFormChildクラスにコピー等の編集機能を持たせるということでしょうか?
>
> そんな話はしてません。お好きにどうぞ。
>
> 「型がFormのままではFormChildのメソッド/プロパティが使えない」
> ってことだったので、
> 「ならば適切にcastしてはいかが?」
> と提案しています。

そうですね。
キャストという方法がありました!
#すっかり頭から抜けてました。

CEditクラスでもFormChild型で受け取ることができれば使えますね。
考え方を変えたほうが良いのか煮詰まりかけているところでした。
ありがとうございました。
引用返信 編集キー/
■31363 / inTopicNo.8)  Re[7]: MDI親フォームのクラスから子フォーム値の変更はできますか?
□投稿者/ tamaboyo (25回)-(2009/01/20(Tue) 18:28:48)
補足です。

FormChildクラスでもForm型をキャストしたところ、
publicにしていたコントロールは表示されました。
#namespaceが抜けていたのでちょっとはまりましたが。

解決しました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -