我有一個類庫,它擁有一個「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();
}
感謝Hans,令人沮喪但您的信息有所幫助。我只是創建了一個新的'ShowDialog()'來手動定位表單 – Simon