- PR -

基本的な事ですが。

投稿者投稿内容
よっこらしょ
常連さん
会議室デビュー日: 2006/11/18
投稿数: 24
投稿日時: 2007-02-10 02:16
ウインドウズフォームを追加して
クラスレベル変数 Private frm2 as Form2を宣言します。

ボタンのクリックイベントで
frm2 = New Form2
frm2.Show()
として実行します。

するとボタンクリックでForm2のウインドウが何個も出来ます。
しかしfrm2.text ="あああ"などとすると変わるのは最後に作られたウインドウだけです。
以前に作られたフォームは何に参照されているのでしょうか?
最後に作られた物は frm2で操作できますが、それ以前の物は操作できないのでしょうか?
かさのば
会議室デビュー日: 2007/01/15
投稿数: 12
投稿日時: 2007-02-10 03:06
できないでしょう
引用:

以前に作られたフォームは何に参照されているのでしょうか?


メモリ上のどっかしらに存在してるだけで何からも参照されていません
変数はよく箱に例えられますが、ひとつの箱にはひとつのものしか入りません
複数のものを参照したいなら当然その数だけの箱が必要になります

[追記]
例えば犬を買ってきてポチと名付けたとします。
(ポチ = new 犬)
その後、また新しい犬を買ってそいつにもポチという名前を付けたとします
そうなると前のポチはもうポチではなく唯の名無し犬です
犬として存在はしていますが、名前がないのでもう誰も呼ぶことができません
新しく買ってきた犬と前からいたポチを区別するには、新しい犬にポチとは違う名前を付けるか
ポチに違う名前を与えるかしなければなりません

#うーん、上手い説明を試みましたけど中々思うようにはいかないもんですね・・・

[ メッセージ編集済み 編集者: かさのば 編集日時 2007-02-10 03:26 ]
どせい
大ベテラン
会議室デビュー日: 2006/10/25
投稿数: 145
投稿日時: 2007-02-10 03:52
犬の例えに便乗してみますか。

例えば犬を買ってきてポチと書かれた犬小屋(変数)に入れたとします。

その後、また新しい犬を買って犬小屋に入れようとします。
そうなると犬小屋の定員は1頭なので、前の犬は追い出されます。

追い出されてしまったので、ノラ犬としてどこかに行ってしまいました。
もう呼んでも返事をしません。目の届く所にいませんから。どこかで逞しく生きています。

もし、新しく買ってきた犬と前からいた犬、両方とも飼いたいなら
2つめの犬小屋が必要です。1つの犬小屋に2頭詰め込んではかわいそうです。

--
確かに上手く例えるのは難しいですな。

ところで、スレ主様よ。初級者でないと自称するのは自由だけど、その投稿タイトル「基本的な事ですが。」では初級者なみと思われても仕方ないと思うよ。もう少し考えてタイトルつけようよ。

[ メッセージ編集済み 編集者: どせい 編集日時 2007-02-10 04:03 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-10 09:16
囚人さんところのブログで解説されてたよ
_________________
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-02-10 12:08
引用:

よっこらしょさんの書き込み (2007-02-10 02:16) より:
するとボタンクリックでForm2のウインドウが何個も出来ます。
しかしfrm2.text ="あああ"などとすると変わるのは最後に作られたウインドウだけです。
以前に作られたフォームは何に参照されているのでしょうか?
最後に作られた物は frm2で操作できますが、それ以前の物は操作できないのでしょうか?


Form2 クラス(やそのスーパークラス)の内部のどこかで、自分自身のインスタンスを他のインスタンスから参照してもらうように依頼しているのです。どのインスタンスから参照されているかはその Form2 クラスの内部実装によります。Form2 が依頼先を探すためには、依頼先が後悔している static 的なものを参照しているのでしょう。
本来ならば、Form2 のコンストラクターやメソッドで、そういう依頼先を明示的に引き渡すようにしたほうが、こういう仕組みが分かりやすくてよいのでしょうけど、ウィンドウ関係はそうなっていないことがほとんどです。

#件名については、私も内容を反映した適切なものを付けらることをお勧めします。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-10 12:47
引用:

かさのばさんの書き込み (2007-02-10 03:06) より:

例えば犬を買ってきてポチと名付けたとします。
(ポチ = new 犬)
その後、また新しい犬を買ってそいつにもポチという名前を付けたとします
そうなると前のポチはもうポチではなく唯の名無し犬です


このメタファでは誤解が生じるかと思います。
名前をつけるという喩えが、他の意味に捉えられてしまいそうです。

新しい犬を買って (インスタンス化して) '飼っていれば' (管理していれば)、
次の犬にポチという名前をつけても、何ら問題になりません。

少なくとも、前のポチは 「名無し犬」 にはならないです。
もう飼い主の届かない (参照できない) 場所にいるだけで、ポチはポチです。

引用:

犬として存在はしていますが、名前がないのでもう誰も呼ぶことができません
新しく買ってきた犬と前からいたポチを区別するには、新しい犬にポチとは違う名前を付けるか
ポチに違う名前を与えるかしなければなりません


今回の例ではポチという同名をつけたとしても、インスタンスなのですから区別することができますよね。
区別どうこうより、目の行き届かない場所に行ってしまったので、何ともできないで良いと思います。

...という視点で見てしまう方は多いと思います。
たぶん、名前をつける == 管理するということに結びつかないからでしょう。
管理するのであれば、飼っているということがわかるメタファにしなくてはいけません。
ただし 「区別」 どうこうについては、メタファ以前に誤りがありそうです。

どせいさんのメタファは良いですね。
犬小屋に入れるという行為が、変数に格納することになるでしょうし、
当然飼っていることになりますから、参照を管理していることにもなります。

Jitta さんと、unibon さんの昇華ネタに結び付けますと、
ポチという名前で 「生きてはいる」 という視点も重要になります。
それにしても、GCHandle のうまい喩えが見つからない... orz

そして、何者かによって回収されて破棄されてしまうことがある... (´・ω・`) カワイソス

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
KenTarO
常連さん
会議室デビュー日: 2007/02/10
投稿数: 42
投稿日時: 2007-02-10 15:05
すみません。教えて下さい。
C#の事で聞きたい事があるのですが、どこでどうやって投稿(会議)すれば良いのでしょうか??
全く関係ない話しですみません。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-02-10 15:34
引用:

kentaroさんの書き込み (2007-02-10 15:05) より:
C#の事で聞きたい事があるのですが、どこでどうやって投稿(会議)すれば良いのでしょうか??


これを読んでいる時点で(会議室に入室しているので)画面左上に「新しいスレッド」というボタンがありませんか?

#別の会議室が適切だと思えば、その会議室を選択してからどうぞ

無関係なスレですので、以上で理解できればレス不要です。

[ メッセージ編集済み 編集者: shimix 編集日時 2007-02-10 15:41 ]

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