我试图在新表单的帮助下将MessageBox保持在顶部。
MessageBox.Show(new Form { TopMost = true }, message, heading, buttonType, icon, MessageBoxDefaultButton.Button1, Options);
当我从一个窗体调用它时,它工作正常,但是当我使用一个子弹出窗体(父用户控件的子控件)调用相同的方法时,它会抛出下面的异常。
Exception: Showing a service notification message box with an owner window is not a valid operation. Use the Show method that does not take an owner.
问题是选项参数,我试图传递下面的选项,但两者都不起作用。
MessageBoxOptions.DefaultDesktopOnly
MessageBoxOptions.ServiceNotification
child(popProductionConfirmation)方法调用:
private void callMyMethod()
{
ShowMessageInMessageBox("Automatic Posting Done", "Production Confirmation", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxOptions.DefaultDesktopOnly);
}
private void ShowMessageInMessageBox(string message, string heading, MessageBoxButtons buttonType, MessageBoxIcon icon, MessageBoxOptions Options)
{
CommonMethods.ShowMessageInMessageBox(message, heading, buttonType, icon, Options, this);
}
带有MessageBox的CommonMethods类:
public static void ShowMessageInMessageBox(string message, string heading, MessageBoxButtons buttonType, MessageBoxIcon icon, MessageBoxOptions Options, IWin32Window owner = null)
{
if (owner == null)
{
MessageBox.Show(new Form { TopMost = true }, message, "BTS: " + heading, buttonType, icon, MessageBoxDefaultButton.Button1, Options);
}
else
{
MessageBox.Show(owner, message, "BTS: " + heading, buttonType, icon, MessageBoxDefaultButton.Button1, Options);
}
}
父项和子项弹出窗口创建:
popProductionConfirmation objpopProductionConfirmation;
objpopProductionConfirmation = new popProductionConfirmation();
objpopProductionConfirmation.ShowDialog();
那么,有没有什么方法可以将MessageBox保留在顶部,或者有没有什么方法可以验证或解决这个问题呢?
1条答案
按热度按时间irtuqstp1#
这个错误告诉你所有你需要知道的,特别是这部分:
使用不接受所有者的Show方法。
查看框架的源代码:
它专门寻找一个条件,当你提供一个所有者并使用你试图使用的任何一个标志时,它会抛出一个错误:
SRID.CantShowMBServiceWithOwner
定义为:显示具有所有者窗口的服务通知消息框不是有效的操作。请使用不接受所有者的Show方法。
这就是你看到的错误。
所以要么:
Show()
重载,该重载不将所有者作为参数,或者MessageBoxOptions
参数的。要将消息框保留在顶部,请执行以下操作:
true
。MessageBoxOptions.DefaultDesktopOnly
选项。