DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォーム間の値共有について

分類:[.NET]

お初にお目にかかります。

フォーム間の値共有について、

Public Class Form1
Private _testArray as ArrayList

Public Sub xxx()
Dim frm As New Form2
frm.testArray = Me._testArray
frm.Show()
...
End Sub

End Class

Public Class Form2
Private _testArray as ArrayList ※ プロパティとして使用
...
End Class

という形でフォーム間の値共有ができるようですが、
上記の扱い方で弊害のようなものはあるのでしょうか?

(技術的のみならず、オブジェクト指向的観点からの見地が
いただけると非常にありがたいです。)
こんにちは、じゃんぬ です。

■No11518に返信(ちばさんの記事)
> という形でフォーム間の値共有ができるようですが、
> 上記の扱い方で弊害のようなものはあるのでしょうか?

Form2 のインスタンスが毎回生成されているので「共有」ではないような...
共有という言葉を使うのであれば、Shared なメンバであるべきような...
>>という形でフォーム間の値共有ができるようですが、
>>上記の扱い方で弊害のようなものはあるのでしょうか?
>
> Form2 のインスタンスが毎回生成されているので「共有」ではないような...
> 共有という言葉を使うのであれば、Shared なメンバであるべきような...

すみません、Sharedという単語があるので「共有」という言葉が悪かったです。

上記例にて実装すると、毎回生成されているForm2毎にForm2内の_testArrayの
値を操作しても、Form1のパラメタが反映されます(ここまでは意図したい範囲)
この操作、パラメタの扱い方自体が是か非か、もっとベターな思想があるのか
教えていただきたかったのです。
こんにちは、じゃんぬ です。

■No11525に返信(ちばさんの記事)
> frm.testArray = Me._testArray

これ、Clone() じゃないですよね?
もし、Form2 で何かを入力して、[OK] を選択せず、
[キャンセル] が選択されうる仕様であるなら弊害があります。

プロパティを通して渡すというところは全然問題ないです。
仕様次第というところもありますけど。
たびたびすみません。

> これ、Clone() じゃないですよね?
> もし、Form2 で何かを入力して、[OK] を選択せず、
> [キャンセル] が選択されうる仕様であるなら弊害があります。

Form2のDisposeにて受け渡ししたArrayListを操作する想定です。
仕様面での弊害は感じていません。


ちなみにCloneが良く分かっていない部分もありますが、

testArray As New ArrayList
cloneArray As New ArrayList

testArray.Add(1)
cloneArray = testArray.Clone
cloneArray.Add(2)

とした時に、testArrayに 1,2と入っている結果を期待しています。
それがかなわない為、Cloneを使わずオブジェクトをそのまま渡していたのですが。。。
こんにちは、じゃんぬ です。

■No11531に返信(ちばさんの記事)
> ちなみにCloneが良く分かっていない部分もありますが、
> testArrayに 1,2と入っている結果を期待しています。

試せばわかることなので、試して頂きたいところですが、
期待した結果が得られるはずですよ。
cloneArray は初めにインスタンス化しておく必要はないですね。

    Dim alHoge  As New ArrayList()
    Dim alClone As ArrayList

    alHoge.AddRange(New String() {"Ada", "BASIC", "C", "Delphi"})
    alClone = DirectCast(alHoge.Clone(), ArrayList)
    alClone.Add("Java")

    For Each item As Object In alClone
        MessageBox.Show(item.ToString())
    Next item
> 試せばわかることなので、試して頂きたいところですが、
> 期待した結果が得られるはずですよ。

上記例の場合ですと、期待しているのはalHogeに"Java"が追加されているという
結果です。

> cloneArray は初めにインスタンス化しておく必要はないですね。
そうですね。失礼しました。
■No11533に返信(ちばさんの記事)
> 上記例の場合ですと、期待しているのはalHogeに"Java"が追加されているという
> 結果です。

Clone なので元のインスタンスには影響しませんよね。
どうやら、私は文章を読み違えたみたいですね。

# 複製側のことだと思っていました。

DOBON.NET | プログラミング道 | プログラミング掲示板