Создайте немодальный Messagebox

Как можно было бы пойти о создании Немодального MessageBox? Я должен просто создать свой собственный класс Windows Form и использование это? Если так, есть ли простой способ добавить значок предупреждения (вместо того, чтобы вставить мое собственное изображение одного) и изменить размер на основе текстового объема?

21
задан Smashery 17 June 2010 в 06:53
поделиться

6 ответов

Вам нужно будет создать форму и использовать Show () , чтобы отобразить ее без режима. MessageBox.Show (...) вел себя модально, как показано в примере от ghiboz; «Описание сообщения» отображается до тех пор, пока пользователь не нажмет кнопку.

С помощью MessageBox.Show (...) вы получаете результат, как только окно сообщения закрывается; с немодальным окном сообщения ваш код должен иметь механизм, такой как событие, чтобы реагировать, когда пользователь в конечном итоге выбирает что-то в вашем окне сообщения.

6
ответ дан 29 November 2019 в 06:54
поделиться

Примечание: это создаст модальное диалоговое окно, которое задает не вопрос

вот пример кода

if (MessageBox.Show("Description of the message", "Caption text", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
{
    // Do some stuff if yes pressed
}
else
{
    // no pressed
}
-1
ответ дан 29 November 2019 в 06:54
поделиться

Вы можете использовать стандартный значок системного предупреждения, используя SystemIcons

0
ответ дан 29 November 2019 в 06:54
поделиться

Вы должны либо использовать форму, либо вызвать showDialog ()

А для значков использовать

MessageBoxIcon.Warning

0
ответ дан 29 November 2019 в 06:54
поделиться

// никакой 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();
    }
}

не требует больше потоков и больше кода (у меня нет времени писать) для параллельных ящиков сообщений .

0
ответ дан 29 November 2019 в 06:54
поделиться

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

  • Принимает строку параметра в качестве отображаемого сообщения
  • Заполняет метку на форма с этой строкой
  • Загружает значок с одним из следующих (передать Enum конструктору)
    • SystemIcons.Application
    • SystemIcons.Asterix
    • SystemIcons.Error
    • SystemIcons.Exclamation
    • SystemIcons.Hand
    • SystemIcons.Information
    • SystemIcons.Question
    • SystemIcons.Shield
    • SystemIcons.Warning
    • SystemIcons.WinLogo
  • Вызывает метод Show (), который превращает его в модальный диалог

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

1
ответ дан 29 November 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: