- PR -

外部変数の記述について(グローバル変数)

投稿者投稿内容
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-31 15:11
Blueさん
レスありがとうございます。

見てる人に分かりやすくするために、前レスを
使っただけですよ、自分が考えた
とか、そうゆうのは、関係ないと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-31 15:21
引用:

kenさんの書き込み (2006-03-31 14:54) より:

すみません、言い方悪かったでしょうか??、気をつけます。


いえいえ、とんでもないです。
実は、ken さんがその Form 間の関係をどう捉えているかわかってないんです。

その Form 間が親子のような関係にあるならば、
それは呼び出した時点で値そのものを渡して、値を返したければ、
呼び出した方のフォーム側 "から" 回収すべきでしょうけど、
今回は兄弟のような関係にあると考えていました。

ですが、当初グローバルにしたいという意見もありましたよね?
もしそうであれば、それは Form のメンバでない方が望ましいようにも思えます。

例となるソースを書いておいて恐縮なんですが...

引用:

保持の仕方のコードは、どのように書けばいいのでしょうか??

FormB^ f = gcnew FormB;
f->ShowDialog( this );

こうゆう事でいいのでしょうか??


これは、Blue さんの投稿 から得たものでしょうか?
試行錯誤はされましたか?

引用:

上記の場合は、Bからどのように参照できるようになるのでしょうか?
コードをどのように書けばよいのでしょうか??


どのようなコードを書けば良いか... ですか。
コードは既に私も Blue さんも書いています。
どこに配置するかは ken さんの構成で考えて欲しいんです。
なので、敢えて「もう書いてます」と言ってきました。

ところで ken さんは今までどのような言語・開発をしてきたんでしょうか?
もし、GUI ベースの開発を経験しているのであれば、
構文が違うだけでそのまま生かすことができる部分だと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-31 16:21
じゃんぬねっとさん
レスありがとうございます。

>その Form 間が親子のような関係にあるならば、
>それは呼び出した時点で値そのものを渡して、値を返したければ、
>呼び出した方のフォーム側 "から" 回収すべきでしょうけど、
>今回は兄弟のような関係にあると考えていました。

すみません、詳しく説明いたします。
下記のようになっています。

・メインのダイアログ(一般的なダイアログです、コントロールが色々つけてあります)があります。(Dlg_Aとしておきます。)

・違うダイアログ(一般的なダイアログです、コントロールが色々つけてあります)があります。。(Dlg_Bとしておきます。)

Dlg_Aにあるボタンが押されたときに、Dlg_Bを呼び出します。

■Dlg_A ボタンクリックイベント
−−−−−−−−−−−−−−−−−−−−−−−−−−
Form ^DlgB = gcnew Dlg_B();
DlgB ->ShowDialog();
−−−−−−−−−−−−−−−−−−−−−−−−−−

Dlg_Bダイアログ表示される(モーダル)。。。のような、流れです。
このあと、 Dlg_B:lg_B_Loadの処理があり、
初期化処理に入るようになっています。。
Dlg_Aにある、メンバ変数を参照することよって、
Dlg_Bの表示内容に変化を持たせるようとしています
ShowDlgのところで、『this』を渡したとしても、
Dlg_Bの中での『this』は、Dlg_Bをさしています。。

ちなみに、上記のような事を、
親子のような関係というのでしょうか?

引用:
------------------------------------------------
FormB^ f = gcnew FormB;
f->ShowDialog( this );
------------------------------------------------
↑の場合では、thisを渡していますが、
fダイアログが表示され、その部分でのthisは、fを
さすと思いますが、そこの部分で、呼ばれる前のthisを
fのダイアログが呼ばれてから、参照するには、どうすればいいのでしょうか?

staticを使う事によって、解決は、できるのですが、
出来れば、使わない方法を取りたいと思っています。。
staticが一般的なのでしょうか?

MFCなどで、作成していたときは、Dlg_A XX;
をして、externを行うような、やり方をしたり
していました。。

よろしく御願します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-31 16:53
引用:

kenさんの書き込み (2006-03-31 16:21) より:

ちなみに、上記のような事を、
親子のような関係というのでしょうか?


ShowDialog メソッドである以上は兄弟の関係ではないですよね。
呼び出し元が親になり、呼び出し先が子になります。

引用:

↑の場合では、thisを渡していますが、
fダイアログが表示され、その部分でのthisは、fを
さすと思いますが、そこの部分で、呼ばれる前のthisを
fのダイアログが呼ばれてから、参照するには、どうすればいいのでしょうか?


呼ばれてから参照する必要がないように思います。
最初に渡しておけば良いと思うんですよ。
違うのでしょうか?

確かに、Owner を使って値の参照はできます。
しかし、子から親が何であるかは知ってはいけません。
親が一方的に子が欲しいであろう値を渡します。
その値を回収したい場合は "親から" 回収させます。

子は親から何かを参照したり、親を指定して何かを返すような機構は設けません。
(メソッドの戻り値などは OK )
これはモジュールうんぬんの時代からの原則です。

C++/CLI うんぬんは置いといて、これらを別の言語にたとえられますか?

ちなみに static が一般的かどうかは、仕様次第です。
Form のメンバであるならば、static なメンバというのはおかしいと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-31 17:15
じゃんぬねっとさん、
レスありがとうございます。

とても勉強になりました。

>呼ばれてから参照する必要がないように思います。
>最初に渡しておけば良いと思うんですよ。
>違うのでしょうか?

こちらの方法を使って、解決しようと思います。
ありがとうございました。

囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-31 17:21
引用:

引用:
------------------------------------------------
FormB^ f = gcnew FormB;
f->ShowDialog( this );
------------------------------------------------
↑の場合では、thisを渡していますが、
fダイアログが表示され、その部分でのthisは、fを
さすと思いますが、そこの部分で、呼ばれる前のthisを
fのダイアログが呼ばれてから、参照するには、どうすればいいのでしょうか?


間違ってるような気がします。以下のような意味です。分かっていたらすみません。

this は今、その瞬間に処理しているメソッドのインスタンスです。

コード:
public void Func() // FormAのメソッド
{
	FormB^ f = gcnew FormB; 
	f->ShowDialog( this ); 	// this は FormA のインスタンス
}



_________________
囚人のジレンマな日々
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-31 17:41
囚人さん
レスありがとうございます。

スレッドのタイトルから、かけ離れ
かつ、話題が二転三転してしまい、
すみません。。

引用:
------------------------------------------------
FormB^ f = gcnew FormB;
f->ShowDialog( this );
------------------------------------------------

そうですね、前レスやら、実現しようとしてる事を色々考えながら、
書いていたので・・囚人さんのご指摘の通りだと思います。

引用:-------------------------------------------
呼ばれてから参照する必要がないように思います。
最初に渡しておけば良いと思うんですよ。
違うのでしょうか?
------------------------------------------------

当初、上記のような方法でなく、子から、親への参照が、
出来るのかなと、思っていまして・・
(変数を増やしたくなかったので)

ただ、じゃんぬねっとさんの説明により、
上記の方法が、ベストかなという結論に至りました。。

以上です。ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-31 17:56
引用:

kenさんの書き込み (2006-03-31 17:41) より:

当初、上記のような方法でなく、子から、親への参照が、
出来るのかなと、思っていまして・・(変数を増やしたくなかったので)


変数って "増え" ますか?
まあ、Owner プロパティを使えば増えはしませんけど...

考えて欲しいのは変数の数ではなく、関係と方向です。

 呼び出し元 -> 呼び出し先
 呼び出し元 -> 値 -> 呼び出し先

値は常にこの流れになるべきであり、結果を取得する場合も呼び出し元 "から"、
呼び出し先の公開された読み取り専用のインスタンス メンバを参照します。
メソッドの呼び出しで戻り値として返すのがベスト ウェイだと思います。

とにかく、「呼び出し先は呼び出し元の都合を考えてはならない」で良いです。
ken さん、長々とすいませんでしたね。

囚人さん、ちゃんと読んでますね。(^^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)