【发布时间】:2017-09-25 18:15:58
【问题描述】:
我有一个 DLL: (MessageBox.DLL) 这个 DLL 有一个看起来就像一个消息框的表单。
msgbox的参数和原来的messagebox类似,
myMsgBox("TEXT HERE")
但问题是,如果有多个屏幕,它有时会在错误的屏幕上弹出
我想获取调用表单作为参考,而不像这样作为参数传递
Sub myMsgBox(ByVal MsgText As String)
formMsgbox.mainText = MsgText
formMsgbox.Show()
End Sub
我想做的是像这样引用原始表单
Sub myMsgBox(ByVal MsgText As String)
formMsgbox.mainText = MsgText
formMsgbox.size = new size (me.parent.size.x / 2, me.parent.size.y / 2)
Dim Current_Screen As Screen = Screen.FromControl(me.parent)
If Current_Screen.Primary = False Then
Dim HCenter = Current_Screen.Bounds.Left + _
(((Current_Screen.Bounds.Right - Current_Screen.Bounds.Left) / 2) - ((formMsgbox.Width) / 2))
Dim VCenter = (Current_Screen.Bounds.Bottom / 2) - ((formMsgbox.Height) / 2)
formMsgbox.StartPosition = FormStartPosition.Manual
formMsgbox.Location = New Point(HCenter, VCenter)
Else
formMsgbox.StartPosition = FormStartPosition.CenterScreen
End If
formMsgbox.Show()
End Sub
显然,如果我每次都通过 Form,我可以做到这一点,但要尽量避免这种情况。
我希望它像原始的 Microsoft Messagebox 一样工作,您不传递父级,它自己获取它。
提前致谢
【问题讨论】:
-
Me.Parent 不太可能是您想到的那个。考虑 Form.ActiveForm,就像 MsgBox() 一样。如果它必须是“调用形式”,那么你必须添加一个额外的参数。
-
@HansPassant 谢谢,这就是我要找的 (Form.Activeform) 。请将其发布为答案,以便我接受它
-
只需在自己的帖子中向我们展示您最终做了什么并接受它作为答案。