Есть ли в System.Windows.Forms нестатический ящик сообщений? - PullRequest
1 голос
/ 24 сентября 2008

Я хотел бы что-то, что я могу использовать следующим образом

var msg = new NonStaticMessageBox();
if(msg.Show("MyMessage", "MyCaption", MessageBoxButtons.OkCancel) == DialogResult.Ok)
 {....}

Но, в частности, нестатично (мне нужно передать ссылку на него) кто-нибудь знает, существует ли / где такой объект?

Ответы [ 6 ]

2 голосов
/ 25 сентября 2008

Глядя на комментарии. Инкапсуляция ваш ответ:)

2 голосов
/ 24 сентября 2008

Такой объект не существует в .net Framework. Вам нужно будет свернуть свой собственный.

0 голосов
/ 27 февраля 2009

Вы говорите

"Это, очевидно, упрощение моя проблема. "

Однако ваш вопрос не выявил проблему, которую мы можем решить без дополнительной информации о намерениях.

Учитывая, что любую форму можно показать модально, вызвав ShowDialog и в форме, возвращающей DialogResult. Я не вижу проблемы здесь. Вы можете передать любые параметры, которые вам нравятся, определить содержимое по своему усмотрению, а затем вызвать:

MyFactory.GetMyCustomDialogWithInterfacesOrSomesuch myDialog = new ...
myDialog.ShowDialog() == DialogResult.Ok;

Поскольку вы имеете дело с формой, а не с MessageBox, она не является статичной, поэтому это не проблема.

0 голосов
/ 25 сентября 2008

Возможно, вы захотите взглянуть на класс ExceptionMessageBox , который поставляется с SQL Server. Он находится в автономной сборке, но я не уверен, что вам разрешено распространять его без SQL Server - вам может понадобиться проверить это.

0 голосов
/ 25 сентября 2008

Имейте в виду, что в конце концов методы S.W.F.MessageBox.Show () являются в основном оболочками вокруг основного вызова Win32 MessageBox () API. (Запустите mscorlib через Reflector; вы увидите «настоящий» код в закрытых методах ShowCore.)

Насколько я знаю, не предусмотрено никаких условий для кэширования вызываемого MessageBox в Win32, поэтому в .NET нет способа сделать это.

У меня есть свой собственный класс MessageBox, который я использую - хотя я и сделал это не для его кэширования (в моих сценариях использования в WinForms один и тот же МБ используется редко дважды), а для обеспечения более подробного сообщение об ошибке и информация - заголовок, описание, возможность скопировать сообщение в буфер обмена (обычно это инструмент, который уведомляет пользователя о необработанном исключении), а затем кнопки.

Ваш пробег может отличаться.

0 голосов
/ 25 сентября 2008

почему вам нужно передать ссылку на это? Вы могли бы просто использовать MessageBox.Show и все? если вам это действительно нужно, вы можете создать свой собственный класс MessageBox, например:

public class MessageBox
{
    private Form _messageForm = null;

    public void Show(string title,...) {...}
}

или вы можете унаследовать класс MessageBox и реализовать свои собственные члены экземпляра ... однако я не вижу в этом смысла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...