2017-09-25 53 views
-1

我有一個DLL:(MessageBox.DLL) 此DLL有一個看起來就像一個消息框的形式。在調用窗體的同一屏幕上從DLL彈出窗體

的MSGBOX也有類似的參數作爲原始消息框,

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 

很顯然,我能做到這一點,如果我每次都通過形式,而是試圖避免這種情況。

我希望它能像原來的Microsoft Messagebox一樣工作,在那裏你不通過父項,它自己就能得到它。

預先感謝

+2

Me.Parent不太可能是你想到的那個。考慮Form.ActiveForm,就像MsgBox()一樣。如果它*必須*是「調用形式」,那麼你必須添加一個額外的參數。 –

+0

@HansPassant謝謝,這就是我正在尋找(Form.Activeform)。請將其發佈爲答案,以便我可以接受 –

+0

只需向我們展示您最終在自己的帖子中做了什麼,並接受它作爲答案。 –

回答

1

我結束了使用

調用活性形式
Form.ActiveForm 

所以這現在按預期工作:

Sub myMsgBox(ByVal MsgText As String) 
    Dim f as Form.ActiveForm 
    formMsgbox.mainText = MsgText 
    formMsgbox.size = new size (f.size.x/2, f.size.y/2) 
    Dim Current_Screen As Screen = Screen.FromControl(f) 
    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 
0

如果得到調用形式是一個要求,則必須添加其他參數。爲了簡化它遠一點我把它變成一個extension method

Imports System.Runtime.CompilerServices 

Public Module Extensions 
    <Extension()> _ 
    Public Sub myMsgBox(ByVal TargetForm As Form, ByVal MsgText As String) 
     formMsgbox.mainText = MsgText 
     formMsgbox.Size = New Size(TargetForm.Width/2, TargetForm.Height/2) 
     Dim Current_Screen As Screen = Screen.FromControl(TargetForm) 

     ...the rest of your code... 
    End Sub 
End Module 

然後你可以使用它像這樣:

Me.myMsgBox("Hello World!")