2008-09-24 2 views
1

Я хотел бы что-то, что я могу использовать следующим образомИмеет ли System.Windows.Forms нестатический почтовый ящик?

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

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

+0

Зачем вам это нужно? Похоже, вы можете просто заменить «msg» на System.Windows.Forms.MessageBox и пропустить параметр вокруг без реального выигрыша. Если это так, вы можете абстрагировать сообщения, а некоторые из них идут в ящики и некоторые другие, просто реализуйте «в другом месте», который вызывает MessageBox. – 2008-09-24 18:45:08

+0

Это, очевидно, упрощение моей проблемы.Я, в конце концов, буду реализовывать свой собственный itnerface, но на данный момент мне хотелось бы что-то быстро и грязно для прототипа. – 2008-09-24 19:05:41

ответ

2

Такой объект не существует в рамках .net. Вам нужно будет сворачивать самостоятельно.

+0

Вау, это неудачный надзор, хорошо, спасибо. – 2008-09-24 18:48:48

2

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

0

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

public class MessageBox 
{ 
    private Form _messageForm = null; 

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

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

0

Помните, что в конце дня методы SWFMessageBox.Show() являются в основном оболочками вокруг вызова API-интерфейса Win32 MessageBox(). (Запустите mscorlib через Reflector, вы увидите «реальный» код в частных методах ShowCore.)

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

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

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

0

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

0

Вы говорите

"Очевидно, что это упрощение моей проблемы."

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

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

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

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

Смежные вопросы