2014-02-14 35 views
0

我有一個類庫,它擁有一個「MessageBox」等價物,並帶有一些更多的花裏胡哨的東西。類庫中的ShowDialog(IWin32Owner)

如果我打電話給ShowDialog(IWin32Owner)方法,這個方法就行得通,表單將顯示在我父表單的中心。

但是,有時候,這種形式是從我的項目中的一個類中調用的,所以我無法訪問表單所有者。在這種情況下,我可以將null傳遞給ShowDialog()方法,但它看起來不能識別「當前活動窗口」並將其顯示在中心。我假設,因爲它在另一個班級圖書館。

那麼有什麼辦法可以獲得用戶正在處理的當前活動表單(或至少是屏幕)嗎?

編輯

確定這是更多地與FormStartPosition枚舉。

如果我使用CentreScreen,則應按照MSDN默認爲當前活動的監視器。但是,如果窗體位於類庫中,這似乎默認爲默認監視器。

確定:

這是有問題的代碼:也沒有設定形式向中心屏幕:

public static DialogResult ShowYesNoCancel(string message) 
    { 
     using (frmMessage form = new frmMessage()) 
     { 
      form.Text = @"Input Required"; 
      form.lblMessage.Text = message; 
      form.btnNo.Visible = true; 
      form.btnOK.Text = @"Yes"; 
      form.btnOK.DialogResult = DialogResult.Yes; 
      form.StartPosition = FormStartPosition.CenterScreen; 
      return form.ShowDialog(); 
     } 
    } 

A液:

/// <summary> 
    /// Overridden to ensure its in the centre of the current screen 
    /// </summary> 
    /// <returns></returns> 
    public new DialogResult ShowDialog() 
    { 
     Screen current = Screen.FromPoint(MousePosition); 
     Rectangle s = current.WorkingArea; 
     StartPosition = FormStartPosition.Manual; 
     Location = new Point(s.Left + s.Width/2 - Width/2, s.Top + s.Height/2 - Height/2); 
     return base.ShowDialog(); 
    } 

回答

1

這應該默認爲當前監視器上

的問題是:這是「當前活動監視器」,如果你有一個以上的?如果你有兩個或兩個以上的問題,那麼這個問題會變得很混亂,輔助監視器與主要監視器並沒有多少「活躍」,它同樣能夠顯示窗口。

Winforms使用的啓發式是「顯示鼠標光標的顯示器」。底層調用:

Screen desktop = Screen.FromPoint(Control.MousePosition); 

如果你想模仿該MessageBox.Show()用於查找所有者然後編寫代碼,以便找到當前活動窗口的行爲。潛在的winapi電話是GetActiveWindow()。哪個ShowDialog()已經使用了,因此可能會有更多的事情比滿足眼球要好,比如一個不是Winforms窗口的活動窗口。本機MessageBox()winapi函數不介意,但是ShowDialog()會這樣做。使用Spy ++來診斷這一點。

+0

感謝Hans,令人沮喪但您的信息有所幫助。我只是創建了一個新的'ShowDialog()'來手動定位表單 – Simon

1

您可以使用Form.ActiveForm

獲取此應用程序的當前活動表單。

但是,事實上,您的類庫自己顯示此消息而不知道UI,可能不是一個好兆頭。

0

Form.ActiveForm只有在任何形式的應用程序有重點時才能使用。所以如果你的應用程序在後臺,這將是沒有幫助的。

改爲使用Application.OpenForms。檢索集合中的最後一個項目,它代表最後一個openend窗體。

注意與特殊的窗體屬性,如ShowInTaskBar ...他們可能不會出現在這個集合!這裏描述: https://stackoverflow.com/a/3751748/2243584