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

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

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

Re[2]: :


(過去ログ 133 を表示中)

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

■78676 / inTopicNo.1)  子フォームから呼び出したクラスから、子フォームのラベル操作
  
□投稿者/ WAN (8回)-(2016/02/05(Fri) 23:33:03)

分類:[VB.NET/VB2005 以降] 

2016/02/05(Fri) 23:34:06 編集(投稿者)
2016/02/05(Fri) 23:33:34 編集(投稿者)

失礼致します。

環境はVisual Studio 2012の環境下で、言語はVB2012、.netフレームワークは3.0です。

以下の流れを実施しようとしています。

========================================

Form1 ボタンクリック

Form2 フォームが表示された時にClass1を呼び出す

Class2 処理の中でForm2のラベルを変更

========================================

Form2のラベルを変更しようとしても変化してくれません。

■Form1

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim c2 As New Form2
c2.Show()
End Sub

End Class

■Form2

Public Class Form2
Public Sub ttt()
Me.Label2.Text = "クラスから"
'Form1.Label1.Text = "クラスから"
End Sub

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
Dim c2 As New Class2
c2.fff()
End Sub

End Class

■Class2

Friend Class Class2
Public Sub fff()
Form2.ttt()
End Sub

End Class

コメントアウトしていますが、Form1のラベルに対して行うと変化してくれます。
Form2のラベルを変更できるようにするにはどのようにすれば良いのでしょうか。

引用返信 編集キー/
■78677 / inTopicNo.2)  Re[1]:
□投稿者/ Azulean (592回)-(2016/02/06(Sat) 00:11:46)
2016/02/06(Sat) 00:14:01 編集(投稿者)

No78676 (WAN さん) に返信
> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
> Dim c2 As New Form2
> c2.Show()
> End Sub
(略)
> Public Sub fff()
> Form2.ttt()
> End Sub

c2 と Form2 は別のインスタンスであることが理由です。(暗黙のインスタンスとか、既定のインスタンスとか呼ばれる仕組みです)
Class2 のコンストラクタの引数か、fff メソッドの引数に Me (Form2 のインスタンス)を渡してあげて、それに対して操作できるように変更してください。



Friend Class Class2
Private f As Form2

Public Sub New(ByVal parent As Form2)
f = parent
End Sub

Public Sub fff()
f.ttt()
End Sub

End Class

Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
Dim c2 As New Class2(Me)
c2.fff()
End Sub

' イメージで書きました。
' VB.NET には疎いのでコンパイルが通らないかも。
引用返信 編集キー/
■78678 / inTopicNo.3)  Re[2]: :
□投稿者/ WAN (9回)-(2016/02/06(Sat) 00:38:28)
2016/02/06(Sat) 10:05:17 編集(投稿者)

ありがとうございます。
参考にし、以下のように書き換えたことでForm2のラベルを変更することができました。
仕組みに関しては理解しきれていないのでしっかり解読して勉強しようと思います。

■Form1

Public Class Form1

'ボタンがクリックされたら実行
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'Form2のインスタンスを参照
Dim f2 As New Form2
'インスタンスを作成、実行
f2.Show()
End Sub

End Class

■Form2

Public Class Form2

'フォームが表示されたら一回実行
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
'Class2のインスタンスを参照しつつ、コンストラクタの引数でForm2のインスタンスを渡す
Dim c2 As New Class2(Me)
'インスタンスを作成、実行
c2.fff()
End Sub

End Class

■Class2

Public Class Class2

'Form2のインスタンスを参照
Private f2 As Form2
Public Sub New(ByVal parent As Form2)
f2 = parent
End Sub

'Form2のラベルを操作。
Public Sub fff()
f2.Label2.Text = "クラスから"
End Sub

End Class

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -