同一フォームを複数開き制御する。 vb2013 | 備忘録 (。・_・。)ノ




◎仕様


①アクション

 チェックボックスはオン、フォームオープン

 フォームボタンでフォーム1(1号機、2号機)を2個開く

 チェックボックスはオフ、フォームコントロール


②アクション

 フォームボタンでフォーム1(1号機、2号機)を3回、交互にアクティブにする。



◎ソース


■Module1.vb

Module Module1

    Public str As String = ""

    Public intCnt As Integer = 0

End Module


■Main.vb

Public Class Main

    Private cForm1 As New Form1()

    Private cForm2 As New Form1()


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

        If CheckBox1.Checked = True Then

            '制御を行うフォームを開く

            cForm1.Show()

            cForm2.Show()

            CheckBox1.Checked = False

            CheckBox1.Text = "Form Ctl"

        Else

            '開いているフォームを制御

            For i = 1 To 3

                cForm1.Activate()

                cForm2.Activate()

            Next i

        End If

        Me.Activate()

    End Sub

End Class


■Form1.vb

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        If str = "" Then

            str = "1号機"

        Else

            str = "2号機"

        End If

        Me.Text = str.ToString

    End Sub


    Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated

        'メインフォームのチェックボックスを判定する

        If Main.CheckBox1.Checked = False Then

            'フォーム制御時の処理

            System.Threading.Thread.Sleep(800)

            intCnt += 1

            Console.WriteLine("{0}={1}", Me.Text & "_intCnt", intCnt)

        End If

    End Sub

End Class






◎ソース(プロパティ版)


■Module1.vb

Module Module1

    Public str As String = ""

    Public intCnt As Integer = 0

End Module


■Main.vb

Public Class Main

    Private cForm1 As New Form1()

    Private cForm2 As New Form1()

    Private Shared _mainInstance As Main


    Public Shared Property MainInstance() As Main

        Get

            Return _mainInstance

        End Get

        Set(ByVal Value As Main)

            _mainInstance = Value

        End Set

    End Property


    Private Sub Main_Load(sender As Object, e As EventArgs) Handles Me.Load

        Main.MainInstance = Me

    End Sub


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

        If CheckBox1.Checked = True Then

            '制御を行うフォームを開く

            cForm1.Show()

            cForm2.Show()

            CheckBox1.Checked = False

            CheckBox1.Text = "Form Ctl"

        Else

            '開いているフォームを制御

            For i = 1 To 3

                cForm1.Activate()

                cForm2.Activate()

            Next i

        End If

        Me.Activate()

    End Sub

End Class


■Form1.vb

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

        If str = "" Then

            str = "1号機"

        Else

            str = "2号機"

        End If

        Me.Text = str.ToString

    End Sub


    Private Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated

        'メインフォームのチェックボックスを判定する

        If Main.MainInstance.CheckBox1.Checked = False Then

            'フォーム制御時の処理

            System.Threading.Thread.Sleep(800)

            intCnt += 1

            Console.WriteLine("{0}={1}", Me.Text & "_intCnt", intCnt)

        End If

    End Sub

End Class