Pergunta

Como alguém pode criar uma caixa de mensagem modificada? Tenho que apenas criar minha própria classe de formulário do Windows e usar isso? Nesse caso, existe uma maneira fácil de adicionar um ícone de aviso (em vez de inserir minha própria imagem de uma) e redimensionar com base no volume de texto?

Foi útil?

Solução

Você terá que criar um formulário e usar Show() para exibi -lo modeless. MessageBox.Show(...) comportou modal como visto no exemplo de ghiboz; "Descrição da mensagem" é exibida até que o usuário pressione um botão.

Com MessageBox.Show(...) você obtém o resultado assim que a caixa de mensagem for fechada; Com uma caixa de mensagem modificada, seu código terá que ter um mecanismo como um evento para reagir quando o usuário finalmente selecionar algo na sua caixa de mensagem.

Outras dicas

Se você precisar de uma caixa de mensagem que apenas se exiba enquanto seu código continua em execução em segundo plano (a caixa ainda é modal e impedirá que o usuário use outras janelas até que o OK seja clicado), você sempre pode iniciar a caixa de mensagem em seu próprio thread e continue fazendo o que você faz no tópico original:

    // 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.

Além de escrever o código, você pode criar uma pequena forma que no construtor faz o seguinte

  • Pega uma string de parâmetro como a mensagem para exibir
  • Preenche um rótulo no formulário com esta string
  • Carrega um ícone com um dos seguintes (passe em uma enumeração para o construtor)
    • SystemIcons.Application
    • SystemIcons.Asterix
    • SystemIcons.Error
    • SystemIcons.Exclamation
    • SystemIcons.Hand
    • SystemIcons.Information
    • SystemIcons.Question
    • SystemIcons.Shield
    • SystemIcons.Warning
    • SystemIcons.WinLogo
  • Calls Show () que fará com que seja uma caixa de diálogo modal

Se você realmente quisesse, pode ouvir um evento que é disparado quando o botão OK for pressionado.

Você pode usar o ícone de aviso de sistema padrão usando SystemIcons

Você tem que usar o formulário e o showdialog ()

E para uso de ícones

MessageBoxIcon.Warning

// Sem 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();
    }
}

Precisa de mais threads e mais código (não tenho tempo suficiente para escrever) para caixas de mensagens simultâneas.

Nota: Isso criará uma caixa de diálogo modal, que não é o que a pergunta está fazendo

Aqui está um código de amostra

if (MessageBox.Show("Description of the message", "Caption text", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.Yes)
{
    // Do some stuff if yes pressed
}
else
{
    // no pressed
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top