2013/03/25(Mon) 17:14:44 編集(投稿者)
2013/03/25(Mon) 17:14:10 編集(投稿者)
2013/03/25(Mon) 17:14:04 編集(投稿者)
<pre><pre>■No65936 (howling さん) に返信
>>Form3(FormC)をヘルプ画面のように扱うため、Form3(FormC)を表示するときにパラメータを渡すようなコードを書いているのですが、
>>パラメータが変更されたら表示するヘルプを変更する処理が走らなくなってしまいました。
>
> これは、shuさんのサンプルの結果そうなってしまったわけではないと思うのですが…。
> Form2(FormB)から何かしらの値を渡してやった後に、更新処理が行われていないのでは???
> 先のコードで、ボタンの値が増加すること自体は確認していますから、おそらくできると思いますよ。
コードを見直してみたところ、自分のコーディングミスでした。申し訳ありませんでした。
> それでも良いです。
> なんでこの方法を提案したかと言えば、悩まずに済むから、という1点のみです。
> Form3(FormC)がどこでどのような状態なのか、というのを考えなくて済みますからね。
> ただ、同じインスタンスを使いまわしてvisibleのみを変更するだけの方が、多分処理は軽いですし、
> 処理速度のことを考慮するようなアプリであれば、オススメしません。
howling さんのお言葉でせっかくここまでできたんだからもうちょっとやってみようと思い、
少し悩みましたが、ようやく意図した挙動にすることができました。
教えていただいたのと少し違うと思いますが、下のような感じにコーディングしたところ、
意図した挙動になりましたので、解決とさせていただきます。
------------------------------------------------------------------------------------------
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
If (Class1.ShareForm Is Nothing) Then
Class1.ShareForm = New Form3()
End If
Class1.ShareForm.IsOpened = True
Class1.ShareForm.Owner = Me
Class1.ShareForm.Show()
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
If (Class1.ShareForm IsNot Nothing) Then
Class1.ShareForm.Hide()
End If
Dim f2 As New Form2()
f2.ShowDialog()
If (Class1.ShareForm IsNot Nothing AndAlso Class1.ShareForm.IsOpened) Then
Class1.ShareForm.Hide()
Class1.ShareForm.Owner = Me
Class1.ShareForm.Show()
End If
End Sub
End Class
------------------------------------------------------------------------------------------
Public Class Form2
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
If (Class1.ShareForm Is Nothing) Then
Class1.ShareForm = New Form3()
End If
Class1.ShareForm.IsOpened = True
Class1.ShareForm.Owner = Me
Class1.ShareForm.Show()
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
Private Sub Form2_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If (Class1.ShareForm IsNot Nothing AndAlso Class1.ShareForm.IsOpened()) Then
Class1.ShareForm.Hide()
Class1.ShareForm.Owner = Me
Class1.ShareForm.Show()
End If
End Sub
End Class
------------------------------------------------------------------------------------------
Public Class Form3
Private _Counter As Integer
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
_Counter += 1
Label1.Text = String.Format("TEST: {0} 回", _Counter)
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Me.Close()
End Sub
Private Sub Form3_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Class1.ShareForm = Nothing
End Sub
Private _IsOpened As Boolean
Public Property IsOpened() As Boolean
Get
Return _IsOpened
End Get
Set(ByVal value As Boolean)
_IsOpened = value
End Set
End Property
End Class
------------------------------------------------------------------------------------------
Public Class Class1
Public Shared ShareForm As Form3 = Nothing
End Class
------------------------------------------------------------------------------------------
howling さん、shu さん、
とても丁寧にご説明いただきありがとうございました。</pre></pre>