Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在子窗口VB.NET 2015中访问MDI父StatusStrip_Vb.net - Fatal编程技术网

在子窗口VB.NET 2015中访问MDI父StatusStrip

在子窗口VB.NET 2015中访问MDI父StatusStrip,vb.net,Vb.net,VB.NET 2015--在MDI窗口中放置了带有2个ToolStripStatusLabel的StatusStrip控件。当我打开一个新窗体时,它将是MDI窗口的子窗体 如何读取信息ToolStripStatusLabel For Each不会在StatusStrip中的所有项目中循环,根据我所了解的,ToolStripStatusLabel本身不是控件,因此For Each循环不起作用 出于与上述相同的原因,Me.Owner.Controls也无法访问ToolStripStatusLabel

VB.NET 2015--在MDI窗口中放置了带有2个ToolStripStatusLabel的StatusStrip控件。当我打开一个新窗体时,它将是MDI窗口的子窗体

如何读取信息ToolStripStatusLabel

For Each不会在StatusStrip中的所有项目中循环,根据我所了解的,ToolStripStatusLabel本身不是控件,因此For Each循环不起作用

出于与上述相同的原因,Me.Owner.Controls也无法访问ToolStripStatusLabel


怎么办?

任何子窗体从其父窗体获取数据的正确方法是子窗体引发事件,父窗体通过事件参数将数据传递回子窗体。这样,子窗体就不必知道有关父窗体的任何特定信息,因此,理论上,许多不同的父窗体可以显示相同的子窗体并传递数据。这是松耦合的一个例子

子窗体的外观类似于此,它提供一个在需要数据时引发的事件,并通过它创建的自定义
EventArgs
对象返回该数据:

公共类表单2
公共事件StatusDataRequired作为事件处理程序(属于StatusDataRequiredEventTargets)
需要受保护的可重写子状态数据(如状态数据需要EventTargets)
RaiseEvent StatusDataRequired(Me,e)
端接头
私有子GetStatusData()
将e调暗为所需的新状态数据EventTargets
OnStatusDataNeeded(e)
MessageBox.Show(如StatusData)
端接头
'...
末级
公共类StatusDataNeedEventArgs
公共属性StatusData作为字符串
末级
如您所见,这里不依赖任何特定类型的父窗体,也不依赖作为MDI子窗体的此窗体。它只会引发它的事件,任何侦听者都可以提供状态数据,无论关系如何

在您的情况下,MDI父窗体可能如下所示:

公共类表单1
'存储将显示在StatusStrip中的数据。
私有状态数据作为字符串
'在StatusStrip中显示状态数据。
私有子集合statustext()
ToolStripStatusLabel1.Text=状态数据
端接头
'创建并显示子窗体。
私有子DisplayChildForm()
使用{.mdipalent=Me}将子窗体调整为新窗体2
'处理子级需要状态数据时引发的事件。
AddHandler childForm.StatusDataRequired,childForm\u StatusDataRequired的地址
childForm.Show()
端接头
'将状态数据传递给子窗体。
私有子表单_StatusDataNeeded(发送方作为对象,e作为StatusDataNeededEventArgs)
e、 StatusData=StatusData
端接头
'...
末级
如您所见,状态数据存储在其自己的字段中。
StatusStrip
用于显示状态数据,而不是存储。父窗体创建并显示子窗体并处理事件。在事件处理程序中,它只是将状态数据传递给
e
参数的属性


要了解有关创建自己的事件的详细信息,请参阅。

任何子窗体从其父窗体获取数据的正确方法是,子窗体引发事件,父窗体通过事件参数将数据传递回子窗体。这样,子窗体就不必知道有关父窗体的任何特定信息,因此,理论上,许多不同的父窗体可以显示相同的子窗体并传递数据。这是松耦合的一个例子

子窗体的外观类似于此,它提供一个在需要数据时引发的事件,并通过它创建的自定义
EventArgs
对象返回该数据:

公共类表单2
公共事件StatusDataRequired作为事件处理程序(属于StatusDataRequiredEventTargets)
需要受保护的可重写子状态数据(如状态数据需要EventTargets)
RaiseEvent StatusDataRequired(Me,e)
端接头
私有子GetStatusData()
将e调暗为所需的新状态数据EventTargets
OnStatusDataNeeded(e)
MessageBox.Show(如StatusData)
端接头
'...
末级
公共类StatusDataNeedEventArgs
公共属性StatusData作为字符串
末级
如您所见,这里不依赖任何特定类型的父窗体,也不依赖作为MDI子窗体的此窗体。它只会引发它的事件,任何侦听者都可以提供状态数据,无论关系如何

在您的情况下,MDI父窗体可能如下所示:

公共类表单1
'存储将显示在StatusStrip中的数据。
私有状态数据作为字符串
'在StatusStrip中显示状态数据。
私有子集合statustext()
ToolStripStatusLabel1.Text=状态数据
端接头
'创建并显示子窗体。
私有子DisplayChildForm()
使用{.mdipalent=Me}将子窗体调整为新窗体2
'处理子级需要状态数据时引发的事件。
AddHandler childForm.StatusDataRequired,childForm\u StatusDataRequired的地址
childForm.Show()
端接头
'将状态数据传递给子窗体。
私有子表单_StatusDataNeeded(发送方作为对象,e作为StatusDataNeededEventArgs)
e、 StatusData=StatusData
端接头
'...
末级
如您所见,状态数据存储在其自己的字段中。
StatusStrip
用于显示状态数据,而不是存储。父窗体创建并显示子窗体并处理事件。在事件处理程序中,它只是将状态数据传递给
e
参数的属性


要了解有关创建自己的事件的更多信息,请参阅。

JMCILHINEY的事件方法无疑是一种更好的方法,但是作为一种快速解决方案,
My
命名空间可以在VB.Net中使用

My.Forms.<Form Name>.<Control name>.<property>
对于那些喜欢阅读更多有关我的Namespac的内容的人
My.Forms.AM_MDI.ToolStripStatusLabel1.Text