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

わんくま同盟

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

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

ツリー一括表示

RadioButtonの初期設定とMDI子フォームとの動作に /みか (24/03/09(Sat) 20:26) #102995
Re[1]: RadioButtonの初期設定とMDI子フォームとの動作に /KOZ (24/03/10(Sun) 00:34) #102996
  └ Re[2]: RadioButtonの初期設定とMDI子フォームとの動作に /みか (24/03/10(Sun) 19:14) #102998
    └ Re[3]: RadioButtonの初期設定とMDI子フォームとの動作に /KOZ (24/03/11(Mon) 11:54) #103001


親記事 / ▼[ 102996 ]
■102995 / 親階層)  RadioButtonの初期設定とMDI子フォームとの動作に
□投稿者/ みか (17回)-(2024/03/09(Sat) 20:26:21)

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

何故、「RadioButtonの初期設定」の後に、再びfrmchild.Show()まで戻るのかを教えてください。
戻らずにその次への「Private Sub RadioButton1_CheckedChanged・・」へと進みたいのです。
ちなみに「RadioButtonの初期設定」の部分を削除すれば、そうなります。


Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'このフォームを MDI コンテナとして設定 
        Me.IsMdiContainer = True
    End Sub

    '子フォームを開く
    Private Sub スタートToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles スタートToolStripMenuItem.Click
        Dim frmchild As New Form2
        frmchild.MdiParent = Me
        frmchild.Show()
    End Sub
End Class


Public Class Form2
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        'RadioButtonの初期設定 
        RemoveHandler RadioButton1.CheckedChanged, AddressOf RadioButton1_CheckedChanged
        RadioButton1.Checked = True
        AddHandler RadioButton1.CheckedChanged, AddressOf RadioButton1_CheckedChanged

        Stop    '動作の確認の為、一旦止める。
    End Sub     'ここから何故か frmchild.Show() に戻るのが不思議です。

    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged

    End Sub
End Class

[ □ Tree ] 返信 編集キー/

▲[ 102995 ] / ▼[ 102998 ]
■102996 / 1階層)  Re[1]: RadioButtonの初期設定とMDI子フォームとの動作に
□投稿者/ KOZ (436回)-(2024/03/10(Sun) 00:34:26)
2024/03/10(Sun) 00:46:33 編集(投稿者)
Friend WithEvents RadioButton1 As RadioButton

Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged

End Sub

このように書くと、WidthEvent をつけたフィールドはプロパティとしてコンパイルされ、次の様になります。

Private _RadioButton1 As RadioButton

Friend Property RadioButton1 As RadioButton
    Get
        Return _RadioButton1
    End Get
    Set(value As RadioButton)
        If _RadioButton1 IsNot Nothing Then
            RemoveHandler _RadioButton1.CheckedChanged, AddressOf RadioButton1_CheckedChanged
        End If
        _RadioButton1 = value
        If _RadioButton1 IsNot Nothing Then
            AddHandler _RadioButton1.CheckedChanged, AddressOf RadioButton1_CheckedChanged
        End If
    End Set
End Property

Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) ' Handles は無くなる

End Sub

なので次のコードを実行すると

RemoveHandler RadioButton1.CheckedChanged, AddressOf RadioButton1_CheckedChanged  'イベントが解除される
RadioButton1.Checked = True                                                       '値が変更されても飛ばない 
AddHandler RadioButton1.CheckedChanged, AddressOf RadioButton1_CheckedChanged     '変更された後なので飛ばない

ということになります。

[ 親 102995 / □ Tree ] 返信 編集キー/

▲[ 102996 ] / ▼[ 103001 ]
■102998 / 2階層)  Re[2]: RadioButtonの初期設定とMDI子フォームとの動作に
□投稿者/ みか (18回)-(2024/03/10(Sun) 19:14:35)
No102996 (KOZ さん) に返信

折角のお教えも、どこをどのように変えれば良いのか、よく分からなかったのですが、
でも例え 一旦frmchild.Show() に戻ったとしても問題はないようですので、
このまま使うことにしたいと思います。

[ 親 102995 / □ Tree ] 返信 編集キー/

▲[ 102998 ] / 返信無し
■103001 / 3階層)  Re[3]: RadioButtonの初期設定とMDI子フォームとの動作に
□投稿者/ KOZ (437回)-(2024/03/11(Mon) 11:54:27)
No102998 (みか さん) に返信
> 折角のお教えも、どこをどのように変えれば良いのか、よく分からなかったのですが、
> でも例え 一旦frmchild.Show() に戻ったとしても問題はないようですので、

製作者の意図は、RadioButton1.Checked = True にしたときイベントを起こしたくなかったのでは?
[ 親 102995 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -