Как можно создать MessageBox для моделирования? Должен ли я просто создать свой собственный класс Windows Form и использовать его? Если это так, есть ли простой способ добавить значок предупреждения (вместо того, чтобы вставить мое собственное изображение одного) и изменить размер на основе тома текста?
Создание текстового сообщения Modeless
Ответ 1
Вам нужно будет создать форму и использовать Show()
, чтобы отобразить ее Modeless. MessageBox.Show(...)
вел себя модально, как показано в примере ghiboz; "Описание сообщения" отображается до тех пор, пока пользователь не нажмет кнопку.
С MessageBox.Show(...)
вы получаете результат, как только окно сообщения закрывается; с модульным ящиком сообщений, ваш код должен будет иметь такой механизм, как событие, чтобы реагировать, когда пользователь в конечном итоге выбирает что-то в вашем окне сообщения.
Ответ 2
Если вам нужно окно с сообщением, которое отображается только в том случае, когда ваш код продолжает работать в фоновом режиме (поле по-прежнему модально и не позволит пользователю использовать другие окна до тех пор, пока не будет нажата кнопка ОК), вы всегда можете запустить окно сообщения в его собственный поток и продолжать делать то, что вы делаете в исходном потоке:
// Do stuff before.
// Start the message box -thread:
new Thread(new ThreadStart(delegate
{
MessageBox.Show
(
"Hey user, stuff runs in the background!",
"Message",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
})).Start();
// Continue doing stuff while the message box is visible to the user.
// The message box thread will end itself when the user clicks OK.
Ответ 3
За исключением кода, вы можете создать небольшую форму, которая в конструкторе выполняет следующие
- Принимает строку параметров в качестве сообщения для отображения
- Заполняет метку в форме этой строкой
- Загружает значок с одним из следующих (передать в Enum конструктору)
-
SystemIcons.Application
-
SystemIcons.Asterix
-
SystemIcons.Error
-
SystemIcons.Exclamation
-
SystemIcons.Hand
-
SystemIcons.Information
-
SystemIcons.Question
-
SystemIcons.Shield
-
SystemIcons.Warning
-
SystemIcons.WinLogo
-
- Вызов Show(), который вызовет его модальное диалоговое окно
Если вы действительно хотите, вы можете прослушать событие, которое будет запущено при нажатии кнопки OK.
Ответ 4
Вы можете использовать стандартный значок системного предупреждения, используя SystemIcons
Ответ 5
Вам нужно либо использовать форму, либо вызвать showDialog()
И для использования значков
MessageBoxIcon.Warning
Ответ 6
//no commnet
object sync = new object();
ManualResetEvent Wait = new ManualResetEvent();
//you should create a place holder named MessageData for Message Data.
List<MessageData> Messages = new List<MessageData>();
internal void ShowMessage(string Test, string Title, ....)
{
MessageData MSG = new MessageData(Test, Title);
Wait.Set();
lock(sync) Messages.Add(MSG);
}
// another thread should run here.
void Private_Show()
{
while(true)
{
while(Messsages.Count != 0)
{
MessageData md;
lock(sync)
{
md = List[0];
List.RemoveAt(0);
}
MessageBox.Show(md.Text, md.Title, md....);
}
Wait.WaitOne();
}
}
требуется больше потоков и больше кода (у меня недостаточно времени для записи) для одновременных сообщений.
Ответ 7
Примечание. Это создаст диалоговое окно Modal, в котором не задается вопрос
вот пример кода
if (MessageBox.Show("Description of the message", "Caption text", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
{
// Do some stuff if yes pressed
}
else
{
// no pressed
}