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

メソッドの受け渡しができません・・・

環境/言語:[WindowsXP、使用言語 VB.NET2005]
分類:[.NET]

 このような場合、Form9の Button1をクリックしても
 Form10の Label1、Label3のテキスト、バックカラーが変わりません。

 なぜ Form10の Label1、Label3の、値が
 変わらないのでしょうか?

 教えて下さい、よろしくお願いします。



Public Class Form9


  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
   System.EventArgs) Handles Button1.Click

     Form10.bbb()
     Form10.Label3.Text = "000"

   End Sub

End Class

------------------------------------------------------------

Public Class Form10

  Public Sub bbb()
    Label1.Text = "ccc"
    aaa()
  End Sub


  Public Sub aaa()
    Label1.BackColor = Color.Blue
  End Sub


End Class
■No20832に返信(kawagutiさんの記事)
> Form10.bbb()
> Form10.Label3.Text = "000"

ここのForm10というのが、問題かと思われます。

Form10のインスタンスを

Dim frm As Form10
frm = new Form10()
// 最近C#しか使ってないので、ここの書き方が違ってたらすいません

として、Form9の内部で保持しておけば大丈夫だと思われます。
以降のForm10にたいする操作は、frmを使用して全て行います。

これできっといけると思われます。
クラスを使用する際はインスタンスを作成します。
しかし、VB2005ではフォームに限りそれを省略しておこなうことができます。
#ランタイムが裏でインスタンスを作成してくれます。
http://msdn2.microsoft.com/ja-jp/library/1fsza1t2(VS.80).aspx

あなたが書かれたコードはそれに該当します。
つまり変更しようとしているインスタンスと表示されているインスタンスが異なるのです。

Dim f1 As New Form1
Dim f2 As New Form1
f1.Show()
F2.Show()
Form1.Show()

#3つのフォーム(インスタンス)が表示されるはずです。

言語としての機能ですが、基本的にそれを利用するのは推奨できません。
上記リンクの後例のように明示的にインスタンスを作成して利用するようにしてください。
理由は、
いつ作成され、いつ破棄され、誰が管理していて、今どのインスタンスを利用しているのか
がわからなくなるからです。
■No20834に返信(まどかさんの記事)
> クラスを使用する際はインスタンスを作成します。
> しかし、VB2005ではフォームに限りそれを省略しておこなうことができます。
> #ランタイムが裏でインスタンスを作成してくれます。
> http://msdn2.microsoft.com/ja-jp/library/1fsza1t2(VS.80).aspx

これは、ちょっと勉強になりました。
毎回インスタンスを作り、管理していたので、こんなこともできるというのは
ちょっと驚きですが、ちょっと気持ち悪いのも確かであります。

Showした後に、別メソッドで、Form1.hoge()とかメソッド呼び出しても、
別物として中で扱ってるという事ですか。

Form10.bbb()
Form10.Label3.Text = "000"
Form10.Show()

どうしてもやりたければ、上のようにしろということですね。

ちょっと知識増えました。
ありがとうございます。
ありがとうございました。

 そのとおりにしましたら、解決しました。

 ありがとう!
解決済み!

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