表示/非表示の部分 ----------------------------------------------------------- ''' <summary> ''' モニターForm ''' </summary> Private IOM As IOMonitor
Private _IOMonitor = False
''' <summary> ''' IOモニター表示設定 ''' </summary> ''' <returns>True:表示、False:非表示</returns> Public Overridable Property IOMonitor As Boolean Set(value As Boolean) _IOMonitor = value If _IOMonitor Then IOM = New IOMonitor(Me) IOM.Show() Else IOM.Close() IOM = Nothing End If End Set Get Return _IOMonitor End Get End Property -------------------------------------------
メインクラスからモニターFormへはイベントで情報を渡しています。 ------------------------------------------- #Region "イベント定義" Public Delegate Sub DIODataEventHandler(ByVal sender As Object, ByVal e As NetDataEventArgs) ''' <summary> ''' ネット接続時のイベント ''' </summary> Public Event NetOpen As DIODataEventHandler ''' <summary> ''' ネット切断時のイベント ''' </summary> Public Event NetClose As DIODataEventHandler ''' <summary> ''' ネットエラー時のイベント ''' </summary> Public Event NetError As DIODataEventHandler ''' <summary> ''' データ送信時のイベント ''' </summary> Public Event SendData As DIODataEventHandler #End Region -------------------------------------------
IOMonitor(Form)初期化処理 ------------------------------------------- Private WithEvents dc As DIO_LC Private Delegate Sub MonitorInvoke(sender As Object, e As NetDataEventArgs)
Friend Sub New(dc As DIO_LC)
' この呼び出しはデザイナーで必要です。 InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。 Me.dc = dc DIOName.Text = Strings.Right("000" & Me.dc.Index, 3) & ":" & Me.dc.DIOName & vbCrLf & Me.dc.Place Me.Text = Me.dc.Index & ":" & Me.dc.DIOName End Sub -------------------------------------------
イベント部処理 複数のスレッドから呼び出される為、Invokeしています。。。 ------------------------------------------- Private Sub dc_RecievedData(sender As Object, e As NetDataEventArgs) Handles dc.RecievedData If System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(e.Data).Substring(0, 1) = "R" Then If Me.InvokeRequired Then Me.Invoke(New MonitorInvoke(AddressOf DIO_Disp), sender, e) Return End If DIO_Disp(sender, e) End If End Sub -------------------------------------------
ちょっと気づきました…
Private Delegate Sub MonitorInvoke(sender As Object, e As NetDataEventArgs)
------------------------------------------- Private Sub IOMonitor_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing dc.IOMonitorClose() '表示/非表示のプロパティがdc側にある為、強制的にFalseにしている dc = Nothing MonitorInvoke.Remove(Nothing, Nothing) End Sub -------------------------------------------