Вывод сообщения об ошибке windows forms

How can I show message boxes with a "Ding!" sound and a red 'close' button in it? This is what I'm talking about: I'm trying to create some custom errors and warnings, but this: MessageBox.

How can I show message boxes with a «Ding!» sound and a red ‘close’ button in it? This is what I’m talking about:

screenshot

I’m trying to create some custom errors and warnings, but this:

MessageBox.Show("asdf");

doesn’t seem to give me any customization options.

TylerH's user avatar

TylerH

20.5k62 gold badges75 silver badges97 bronze badges

asked Jan 21, 2010 at 13:21

claws's user avatar

Try this:

MessageBox.Show("Some text", "Some title", 
    MessageBoxButtons.OK, MessageBoxIcon.Error);

caiosm1005's user avatar

caiosm1005

1,6461 gold badge19 silver badges31 bronze badges

answered Jan 21, 2010 at 13:23

Andrew Hare's user avatar

Andrew HareAndrew Hare

340k71 gold badges636 silver badges631 bronze badges

2

Try details: use any option:

MessageBox.Show(
    "your message",
    "window title", 
    MessageBoxButtons.OK, 
    MessageBoxIcon.Warning // for Warning  
    //MessageBoxIcon.Error // for Error 
    //MessageBoxIcon.Information  // for Information
    //MessageBoxIcon.Question // for Question
);

TylerH's user avatar

TylerH

20.5k62 gold badges75 silver badges97 bronze badges

answered Jun 30, 2015 at 12:21

Ahosan Karim Asik's user avatar

MessageBox.Show(
  "your message",
  "window title", 
  MessageBoxButtons.OK, 
  MessageBoxIcon.Asterisk //For Info Asterisk
  MessageBoxIcon.Exclamation //For triangle Warning 
)

Antonio's user avatar

Antonio

18.9k12 gold badges95 silver badges194 bronze badges

answered Jul 8, 2015 at 12:35

Onur Adıyaman's user avatar

You should add namespace if you are not using it:

System.Windows.Forms.MessageBox.Show("Some text", "Some title", 
    System.Windows.Forms.MessageBoxButtons.OK, 
    System.Windows.Forms.MessageBoxIcon.Error);

Alternatively, you can add at the begining of your file:

using System.Windows.Forms

and then use (as stated in previous answers):

MessageBox.Show("Some text", "Some title", 
    MessageBoxButtons.OK, MessageBoxIcon.Error);

answered Jun 28, 2018 at 14:15

Tides's user avatar

TidesTides

11111 bronze badges


Приветствую!

В статье посвященной моему профайлеру для Entity Framework-a, я вкратце описал примененную мной форму для сообщения пользователю об исключительной ошибке в приложении. После оценки количества скачиваний примера кода, было решено выделить этот пример в отдельный проект, а также добавить поддержку WPF приложений.
Исходники библиотеки вместе с примерами опубликованы на CodePlex под свободной лицензией MIT: https://uiexceptionhandler.codeplex.com/

Подробности под катом.

Введение

Всем известно, что приложения периодически падают по самым разным причинам, при этом, крайне желательно показывать пользователю дружественное сообщение об ошибке в приложении, вместо стандартного сообщения Windows.

Что получилось

При подключенной библиотеке, в случае падения приложения будет показано следующие сообщение с просьбой добавить описание шагов которые привели к ошибке и свой email для ответа, при этом текст ошибки сохраняется в лог файл.

При клике по кнопке «Error detail information» выводиться дополнительная информация об ошибке:

Кнопка Debug позволяет подключить отладчик Visual Studio.
Кнопка «Send to Developer» отправляет письмо на почту разработчику. В случае ошибки отправки сообщения, пользователю будет предложено самому отправить лог файл разработчику на почту.
Отправленное разработчику сообщение придет в таком виде:

Использование

1. Забрать последнюю версию кода https://uiexceptionhandler.codeplex.com/SourceControl/latest
2. Собрать в Release mode.
3. Из папки «UIExceptionHandlerLibsDeploy» подключить в проект библиотеку UIExceptionHandlerWinForms.dll в случае WinForms приложения и UIExceptionHandlerWPF.dll в случае WPF приложения.
4. Инициализировать путем вызова статического метода с рядом параметров:

UIException.Start(
   string serverSmtp, 
   int portSmtp, 
   string passwdSmtp, 
   string userSmtp, 
   string programmerEmail,
   string fromEmail, 
   string subject
)

Как это работает

Статический метод UIException.Start подписывает метод HandleError на событие AppDomain.CurrentDomain.UnhandledException:

AppDomain.CurrentDomain.UnhandledException += (sender, e) => HandleError((Exception)e.ExceptionObject);

Метод HandleError:

private static void HandleError(Exception exception)
{
    try
    {
        // запускаем обработчик формы и передаем ему ссылку на форму наследованную от интерфейса IErrorHandlerForm
        new ErrorHandlerController(exception, new ErrorHandlerForm()).Run();
    }
    catch (Exception e)
    {
        // сохраняем ошибку в лог файл
        LogHelper.Logger.Error(e);
        // в случае ошибки обработки выводим сообщение с просьбой отправить лог файл разработчику на почту
       MessageBox.Show("Error processing exception. Please send log file " + LogHelper.ExceptionLogFileName + " to developer: " + Settings.ProgrammerEmail + " rn Exception:" + e);
        // спрашиваем нужно ли подключить отладчик
        if (MessageBox.Show("Attach debugger? n Only for developer!!!", "Debugging...", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
        {
            Debugger.Launch();
            throw;
        }
    }
    finally
    {
        // обязательно завершаем приложение чтобы windows не вывела стандартное сообщение об ошибке
        Environment.Exit(1);
    }
}

Интерфейс IErrorHandlerForm:

public interface IErrorHandlerForm
{
    event Action OnSendButtonClick;
    event Action OnShowErrorLinkClick;
    event Action OnLogFileLinkClick;
    event Action OnDebugButtonClick;

    // меняет высоту формы
    void SetHeight(int height);
    // задает подробное сообщение об ошибке
    string ExceptionInfoText { get; set; }
    // получает текст из поля дополнительной информации введенной пользователем
    string ExceptionDetailText { get; set; }
    // email пользователя для ответа
    string ReplyEmail { get; }
    void ShowExceptionInfoTextBox(bool isShow);
    // выводит информационное сообщение
    void ShowInfoMessageBox( string text, string caption);
    // выводит диалоговое сообщение
    bool ShowQuestionDialog( string text, string caption);
    // показывает окно в режиме диалога! необходимо чтобы приложение дожидалось закрытия окна и завершилось в finaly
    void ShowViewDialog();
    void UpdateContactEmail(string contactEmail);
}

В качестве библиотеки для логгирования используется NLog. Для того чтобы избежать появления лишних xml файлов, вся конфигурация Nlog-а делается в коде:

private static void ConfigureNlog()
{
    var config = new LoggingConfiguration();

    var fileTarget = new FileTarget();
    config.AddTarget("file", fileTarget);

    fileTarget.Layout = @"${longdate} ${message}";
    fileTarget.FileName = "${basedir}/" + ExceptionLogFileName;

    var rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget);
    config.LoggingRules.Add(rule2);

    LogManager.Configuration = config;
}

Чтобы добиться максимальной простой интеграции в проект, я решил все используемые сборки объединить в одну библиотеку. Делается это при помощи приложения ILMerge, путем добавления скрипта в post-build событие:

if $(ConfigurationName) == Release (
"$(SolutionDir)ILMergeILMerge.exe" /out:"$(SolutionDir)Deploy$(TargetFileName)" "$(TargetDir)*.dll" /target:dll /targetplatform:v4,C:WindowsMicrosoft.NETFramework64v4.0.30319 /wildcards
)

Послесловие

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

Надеюсь это все будет кому-то полезно!
Всем спасибо за внимание!

Последнее обновление: 31.10.2015

Как правило, для вывода сообщений применяется элемент MessageBox. Однако кроме сообственно вывода строки сообщения данный элемент может устанавливать
ряд настроек, которые определяют его поведение.

Для вывода сообщения в классе MessageBox предусмотрен метод Show, который имеет различные версии и может принимать ряд параметров.
Рассмотрим одну из наиболее используемых версий:

public static DialogResult Show(
	string text,
	string caption,
	MessageBoxButtons buttons,
	MessageBoxIcon icon,
	MessageBoxDefaultButton defaultButton,
	MessageBoxOptions options
)

Здесь применяются следующие параметры:

text: текст сообщения

caption: текст заголовка окна сообщения

buttons: кнопки, используемые в окне сообщения.
Принимает одно из значений перечисления MessageBoxButtons:

  • AbortRetryIgnore: три кнопки Abort (Отмена), Retry (Повтор), Ignore (Пропустить)

  • OK: одна кнопка OK

  • OKCancel: две кнопки OK и Cancel (Отмена)

  • RetryCancel: две кнопки Retry (Повтор) и Cancel (Отмена)

  • YesNo: две кнопки Yes и No

  • YesNoCancel: три кнопки Yes, No и Cancel (Отмена)

Таким образом, в зависимости от выбора окно сообщения может иметь от одной до трех кнопок.

icon: значок окна сообщения. Может принимать одно из следующих значений перечисления MessageBoxIcon:

  • Asterisk, Information: значок, состоящий из буквы i в нижнем регистре, помещенной в кружок

  • Error, Hand, Stop: значок, состоящий из белого знака «X» на круге красного цвета.

  • Exclamation, Warning: значок, состоящий из восклицательного знака в желтом треугольнике

  • Question: значок, состоящий из вопросительного знака на периметре круга

  • None: значок у сообщения отсутствует

defaultButton: кнопка, на которую по умолчанию устанавливается фокус. Принимает одно из значений перечисления MessageBoxDefaultButton:

  • Button1: первая кнопка из тех, которые задаются перечислением MessageBoxButtons

  • Button2: вторая кнопка

  • Button3: третья кнопка

options: параметры окна сообщения. Принимает одно из значений перечисления MessageBoxOptions:

  • DefaultDesktopOnly: окно сообщения отображается на активном рабочем столе.

  • RightAlign: текст окна сообщения выравнивается по правому краю

  • RtlReading: все элементы окна располагаются в обратном порядке справа налево

  • ServiceNotification: окно сообщения отображается на активном рабочем столе, даже если в системе не зарегистрирован ни один пользователь

Нередко используется один параметр — текст сообщения. Но посмотрим, как использовать остальные параметры. Пусть у нас есть кнопка, в обработчике
нажатия которой открывается следующее окно сообщения:

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(
        "Выберите один из вариантов", 
        "Сообщение", 
        MessageBoxButtons.YesNo, 
        MessageBoxIcon.Information, 
        MessageBoxDefaultButton.Button1, 
        MessageBoxOptions.DefaultDesktopOnly);
}

MessageBox в Windows Forms

Однако нам не просто дается возможность установки кнопок в окне сообщения. Метод MessageBox.Show возвращает объект
DialogResult, с помощью которого мы можем узнать, какую кнопку в окне сообщения нажал пользователь. DialogResult представляет
перечисление, в котором определены следующие значения:

  • Abort: нажата кнопка Abort

  • Retry: нажата кнопка Retry

  • Ignore: нажата кнопка Ignore

  • OK: нажата кнопка OK

  • Cancel: нажата кнопка Cancel

  • None: отсутствие результата

  • Yes: нажата кнопка Yes и No

  • No: нажата кнопка No

Используем обработку выбора пользователя, изменив обработчик нажатия кнопки следующим образом:

private void button1_Click(object sender, EventArgs e)
{
    DialogResult result = MessageBox.Show(
        "Окрасить кнопку в красный цвет?", 
        "Сообщение", 
        MessageBoxButtons.YesNo, 
        MessageBoxIcon.Information, 
        MessageBoxDefaultButton.Button1, 
        MessageBoxOptions.DefaultDesktopOnly);
		
	if (result == DialogResult.Yes)
        button1.BackColor=Color.Red;
    
	this.TopMost = true;
}

И теперь, если в окне сообщения мы выберем выриант Yes, то кнопка окрасится в красный цвет.

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

using System;

using System.Windows.Forms;

namespace Сообщения

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

        }

    }

}

Для того что бы вывести обычно сообщения достаточно вписать в метод нажатия кнопки строку:

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru»);

        }

MessageBox.Show имеет перегруженные варианты метода, следующий пример нам покажет как отобразить окно сообщения с заданным текстом и заголовком.

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт»);

        }

В следующем примере нам придется использовать MessageBoxButtons в качестве передаваемого аргумента. Однако он имеет несколько параметров:

  • MessageBoxButtons.AbortRetryIgnore – Прервать | Повтор | Пропустить
  • MessageBoxButtons.OK — ОК
  • MessageBoxButtons.OKCancel — ОК | Отмена
  • MessageBoxButtons.RetryCancel — Повтор | Отмена
  • MessageBoxButtons.YesNo — Да | Нет
  • MessageBoxButtons.YesNoCancel — Да | Нет | Отмена

Это нам позволит разместить в диалоговом окне сообщение кнопку или кнопки, в зависимости от параметров.

Рассмотрим все примеры с использованием кнопок:

Вариант AbortRetryIgnore

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.AbortRetryIgnore);

        }

Вариант OK

В этом варианте у нас ничего не измениться так как он используется по умолчанию, выводит кнопку Ok.

Вариант OKCancel

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OKCancel);

        }

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

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.RetryCancel);

        }

Вариант YesNo Диалоговое окно подходит для вывода сообщения пользователю с возможностью выбора, подтвердить или отказаться имя в функционале диалогового окна две кнопки Да, Нет.

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.YesNo);

        }

Вариант YesNoCancel Диалоговое окно подходит для вывода сообщения пользователю с возможностью выбора, подтвердить или отказаться имя в функционале диалогового окна три кнопки Да, Нет, Отмена.

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.YesNoCancel);

        }

Метод Show  может принимать в качестве параметра изображения  MessageBoxIcon которые позволяют устанавливать тип сообщения, и могут принимать следующие значения:

MessageBoxIcon.Error Диалоговое окно подходит для вывода сообщения пользователю об ошибке.

private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Error);

        }

MessageBoxIcon.Information Диалоговое окно подходит для вывода сообщения пользователю о какой то информации.

   private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

MessageBoxIcon.None

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

MessageBoxIcon.Question Диалоговое окно подходит для вывода сообщения пользователю о помощи.

  private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Question);

        }

MessageBoxIcon.Warning Диалоговое окно подходит для вывода сообщения пользователю об ошибке или опасности.

  private void button1_Click(object sender, EventArgs e)

        {

            MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Warning);

        }

MessageBoxIcon.Exclamation

private void button1_Click(object sender, EventArgs e)

        {

         MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

        }

MessageBoxIcon.Stop

private void button1_Click(object sender, EventArgs e)

        {

         MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Stop);

        }

MessageBoxIcon.Asterisk

private void button1_Click(object sender, EventArgs e)

        {

         MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

        }

MessageBoxIcon.Hand

private void button1_Click(object sender, EventArgs e)

        {

         MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.OK, MessageBoxIcon.Hand);

        }

Для того что бы сохранить полученный результат после нажатия кнопки, нам достаточно создать переменную класса DialogResult

DialogResult может принимать следующие значения:

  • DialogResult.Abort —  Прервать
  • DialogResult.Cancel — Отмена
  • DialogResult.Ignore — Пропустить
  • DialogResult.No —  Нет
  • DialogResult.Yes —  Да
  • DialogResult.OK —  ОК
  • DialogResult.Retry —  Повтор

  DialogResult resualt=  MessageBox.Show(«nookery.ru», «Сайт», MessageBoxButtons.YesNo);

А что бы посмотреть что хранить переменная resualt мы можем вывести ее в сообщении :

MessageBox.Show(resualt.ToString());

В моем примере я нажал на кнопку Да и вывелось сообщения

В этих примерах мы рассмотрели возможность вывода сообщений пользователю, на основе диалоговых окно в WinForm.

KOLABS

0 / 0 / 1

Регистрация: 21.02.2017

Сообщений: 61

1

Вывод сообщения об ошибке

18.07.2017, 19:55. Показов 23632. Ответов 2

Метки нет (Все метки)


Подскажите как сделать , чтобы если программа не видит БД выводился только Mes Box с описанием проблемы, обработчик исключений сделал, сообщение выводится, но после него вылазит окно со сведениями об исключении, а не хотелось бы чтобы оно появлялось.

C#
1
2
3
4
5
6
7
8
9
10
11
12
try
            {
 
                // TODO: данная строка кода позволяет загрузить данные в таблицу "baseDataSet1.dog". При необходимости она может быть перемещена или удалена.
                this.dogTableAdapter.Fill(this.baseDataSet1.dog);
 
            }
            catch (Exception )//если в try возникнет исключение, обрабатываем его ниже в catch, к примеру выводим сообщение с текстом ошибки
            {
                MessageBox.Show("Нет подключения к базе данных");
            }
        }

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



923 / 600 / 150

Регистрация: 09.09.2011

Сообщений: 1,879

Записей в блоге: 2

18.07.2017, 20:34

2

Цитата
Сообщение от KOLABS
Посмотреть сообщение

но после него вылазит окно со сведениями об исключении

«Вылазит» не пойманное исключение, которое появляется в ходе продолжения кода. Изучите весь маршрут исполнения, чтобы понять как правильно выполнить программу, чтобы дальнейший код не вызывал критических ошибок.



0



0 / 0 / 1

Регистрация: 21.02.2017

Сообщений: 61

18.07.2017, 20:53

 [ТС]

3

Маршрут мне вроде понятен, base — baseDataSet1 — dataGridView1, не понятно как убрать окно с исключением



0



C# MessageBox in Windows Forms displays a message with the given text and action buttons. You can also use MessageBox control to add additional options such as a caption, an icon, or help buttons. In this article, you’ll learn how to display and use a MessageBox in C# WinForms app. You will also learn how to use C# MessageBox class dynamically in code samples. 

C# MessageBox

MessageBox class has an overloaded static Show method that displays a message box with a message and action buttons. The action buttons can be OK and Cancel, Yes and No etc. Here are some of the options that can be used in C# message box.

Simple MessageBox

The simplest form of a MessageBox is a dialog with a text and OK button. When you click OK button, the box disappears.

The following code snippet creates a simple Message Box.

  1. string message = «Simple MessageBox»;  
  2. MessageBox.Show(message);  

MessageBox with Title

The following code snippet creates a simple MessageBox with a title. 

  1. string message = «Simple MessageBox»;  
  2. string title = «Title»;  
  3. MessageBox.Show(message, title);  

MessageBox with Title

MessageBox with Buttons

A MessageBox can have different button combinations such as YesNo and OKCancel. The MessageBoxButtons enumeration represents the buttons to be displayed on a MessageBox and has following values.

  • OK
  • OKCancel
  • AbortRetryIgnore
  • YesNoCancel
  • YesNo
  • RetryCancel

The following code snippet creates a MessageBox with a title and Yes and No buttons. This is a typical MessageBox you may call when you want to close an application. If the Yes button is clicked, the application will be closed. The Show method returns a DialogResult enumeration.

  1. string message = «Do you want to close this window?»;  
  2. string title = «Close Window»;  
  3. MessageBoxButtons buttons = MessageBoxButtons.YesNo;  
  4. DialogResult result = MessageBox.Show(message, title, buttons);  
  5. if (result == DialogResult.Yes) {  
  6.     this.Close();  
  7. else {  
  8.       
  9. }  

MessageBox with Buttons


MessageBox with Icon

A MessageBox can display an icon on the dialog. A MessageBoxIcons enumeration represents an icon to be displayed on a MessageBox and has the following values.

  • None
  • Hand
  • Question
  • Exclamation
  • Asterisk
  • Stop
  • Error
  • Warning
  • Information

The following code snippet creates a MessageBox with a title, buttons, and an icon.

  1. string message = «Do you want to abort this operation?»;  
  2. string title = «Close Window»;  
  3. MessageBoxButtons buttons = MessageBoxButtons.AbortRetryIgnore;  
  4. DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Warning);  
  5. if (result == DialogResult.Abort) {  
  6.     this.Close();  
  7. }  
  8. elseif(result == DialogResult.Retry) {  
  9.       
  10. }  
  11. else {  
  12.       
  13. }  

MessageBox with Icon 

MessageBox with Default Button

We can also set the default button on a MessageBox. By default, the first button is the default button. The MessageBoxDefaultButton enumeration is used for this purpose and it has the following three values.

  • Button1
  • Button2
  • Button3

The following code snippet creates a MessageBox with a title, buttons, and an icon and sets the second button as a default button.

  1. string message = «Do you want to abort this operation?»;  
  2. string title = «Close Window»;  
  3. MessageBoxButtons buttons = MessageBoxButtons.AbortRetryIgnore;  
  4. DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);  
  5. if (result == DialogResult.Abort) {  
  6.     this.Close();  
  7. }  
  8. elseif(result == DialogResult.Retry) {  
  9.       
  10. }  
  11. else {  
  12.       
  13. }  

MessageBox with Default Button

MessageBox with Message Options

MessageBoxOptions enumeration represents various options and has the following values.

  • ServiceNotification
  • DefaultDesktopOnly
  • RightAlign
  • RtlReading

The following code snippet creates a MessageBox with various options.

  1. DialogResult result = MessageBox.Show(message, title, buttons,  
  2. MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2,  
  3. MessageBoxOptions.RightAlign|MessageBoxOptions.RtlReading);  

MessageBox with Message Options

MessageBox with Help Button

A MessageBox can have an extra button called Help button. This is useful when we need to display a help file. The following code snippet creates a MessageBox with a Help button.

  1. DialogResult result = MessageBox.Show(message, title, buttons,  
  2. MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2,  
  3. MessageBoxOptions.RightAlign, true );  

MessageBox with Help Button

We can also specify a help file when the Help button is clicked. The following code snippet references a help file.

  1. DialogResult result = MessageBox.Show(message, title,  
  2. buttons, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, 0, «helpfile.chm»);  

Summary

In this article, we discussed how to create and use a MessageBox in a Windows Forms application.

Обработка исключений в приложении, способы сбра информации об исключениях, настройка провайдера для отчета об ошибках, обработка неотловленных исключений, настройка лога сообщений

Flexberry Platform в сборке ICSSoft.STORMNET.UI.dll содержит классы для обработки исключительных ситуаций.

Простое отображение ошибки

Стандартный сценарий отображения Exception в специальной форме выглядит так:

try
{
  throw new Exception("Опаньки!");
  //...
}
catch(Exception ex)
{
  ErrorBox.Show(ex);
}

Способы сбора информации об исключениях

Иногда, чтобы понять что случилось в системе, недостаточно знать номер строки в исходном коде. Для таких случаев есть возможность сделать ряд снимков экрана, добавить дополнительную информацию об ошибках и передать это всё на форму отображения ошибки. Однако, вся эта информация не будет использована, пока пользователь не выгрузит её с помощью какого-либо провайдера отчётов об ошибках.

Итак, чтобы получить снимки экрана:

//Сделаем снимок только формы
Bitmap screen1 = ErrorBox.CaptureScreenShot(formToCapture);
//или снимем весь экран
Bitmap screen2 = ErrorBox.CaptureScreenShot();

Для того чтобы вывести эти снимки и сообщение:

//...
catch(Exception ex)
{
  List<Bitmap> screens = new List<Bitmap>();
  screens.Add(screen1);
  screens.Add(screen2);
  ErrorBox.Show(ex, screens, "Дополнительная информация об ошибке: переменная Х имеет значение:" + X);
}

Провайдеры отчётов об ошибках

Пользователь имеет возможность выгрузить информацию об ошибке, нажав на соответствующую кнопку на форме ошибки. По-умолчанию доступны 3 провайдера отчётов об ошибках:

  • Сохранить отчёт об ошибке на диск
  • Отправить отчет по электронной почте
  • Скопировать информацию в буфер обмена

Первые 2 варианта поддерживают сохранение изображений экрана (вся информация помещается в один zip-файл). В буфер обмена попадает только текстовая информация.

Чтобы добавить свой провайдер отчёта об ошибке, нужно унаследоваться от интерфейса IBugReportProvider и в конфигурационном файле добавить настройку BugReportProviders, в которой указать полные имена типов провайдеров, разделённые вертикальной чертой.

Важно: нельзя подключить 2 провайдера с одинаковым MenuItemName (будет подключен только первый из них).

Для работы с данными ошибки можно использовать статические методы класса ErrorBox.

Отправка сообщения об ошибке по электронной почте

В стандартном окне сообщения об ошибке существует возможность отправить письмо с сообщением об ошибке.

Форма исключения

При выборе пункта меню “Отправить по электронной почте…” запускается почтовый клиент по умолчанию. Письмо содержит вложение с архивом, в котором находятся снимок экрана, описание ошибки и информация о текущей системной конфигурации.
Сообщение

Для запуска почтового клиента используется интерфейс MAPI. Адрес отправки, заголовок и текст сообщения могут быть настроены в конфигурационном файле приложения с помощью ключей BugReportEmailAddress, BugReportEmailTitle, BugReportEmailBody.

Пример:

<add key="BugReportEmailAddress" value="user@perm.ru" />
<add key="BugReportEmailTitle" value="Ошибка в Кошках или Лапах" />
<add key="BugReportEmailBody" value="Текст сообщения" />

Если указанный ключи не определены в конфигурационном файле, используются значение по умолчанию.

Адрес: пробел (пустую строку MAPI не принимает).

Тема: Ошибка {ИмяИсполнимогоФайла}.

Текст сообщения: В процессе работы пользователя {ИмяWindowsПользователя} в программе { ИмяИсполнимогоФайла} произошла ошибка. Дополнительная информация находится во вложении.

Замечание:

Для временного хранения архива используется папка Environment.SpecialFolder.InternetCache. Однако файл автоматически не удаляется, т.к. он не может быть удален до отправки сообщения.

Добавление информации о прикладной системе

Класс ICSSoft.STORMNET.Windows.Forms.ErrorBox содержит статический делегат, который позволяет собрать информацию о системе для того, чтобы она попала в информацию об ошибке.

/// <summary>
/// Делегат для сбора информации о прикладной системе
/// </summary>
/// <returns></returns>
public delegate string GetCurrentAppInfoDelegate();

/// <summary>
/// Делегат, который должен собрать информацию о прикладном приложении. Его результат будет присобачен к общей информации о системе.
/// </summary>
public static GetCurrentAppInfoDelegate GetCurrentAppInfo = null;

Обработка неотловленных исключений в прикладных системах

Чтобы пользователям не показывалась “страшная” форма с информацией об ошибке, если случилось неотловленное исключение, нужно подписаться на события Application.ThreadException и System.AppDomain.CurrentDomain.UnhandledException для того чтобы обработать их правильным образом.

Генератор приложений Flexberry добавляет строки

System.Windows.Forms.Application.ThreadException += ICSSoft.STORMNET.Windows.Forms.ErrorBox.ApplicationThreadException;
System.AppDomain.CurrentDomain.UnhandledException += ICSSoft.STORMNET.Windows.Forms.ErrorBox.CurrentDomainUnhandledException;

в метод Main приложения (в скобках программиста). Обработчики ICSSoft.STORMNET.Windows.Forms.ErrorBox.ApplicationThreadException и ICSSoft.STORMNET.Windows.Forms.ErrorBox.CurrentDomainUnhandledException просто запускают стандартную ErrorForm с информацией об исключении. Если требуется особая логика, то можно использовать собственный обработчик события.

Подключение лога ошибок

Чтобы включить лог ошибок достаточно указать такой атрибут в файле конфигурации:

<add key="ErrorLog" value="true" />

Все ErrorBox будут записывать ошибки в csv-файл в папку с приложением.

C# MessageBox

Introduction to C# MessageBox

In today’s applications, it is always required that a message is displayed to the user as a token of information or confirmation so that the user is aware of the status of the operation he performed. The message can be anything ranging from “The payment is successful” or a warning type like “Do you want to continue” etc. This is achieved in C# with the help of Message Box. A message box can be considered as an interface between the user and the application. It is nothing but a window that has text, images, or symbols to guide or convey something to the user. Until appropriate action is performed, and the message box is closed, it will not allow other actions to be performed.

Syntax:

Message Box is a class in the “Systems.Windows.Forms” Namespace and the assembly it is available is “System.Windows.Forms.dll”.The show method available in the class is used to display the message along with action buttons. The action buttons can be anything ranging from Yes to No, Ok to Cancel.

Example:

The following code will create a simple Message Box only with the OK button.

string msg = "Test";
MessageBox.Show(msg);

Types of Show Methods

Following are the types of show method:

Syntax Use
MessageBox.Show(String) It will display only the message box with the string that is passed. An ok button is also present to close the dialog.
Example:

Messagebox.Show("Test")
MessageBox.Show( String, String) It will display only the message box with the string that is passed as first parameter. The second parameter is the title of the Message Box. An ok button is also present to close the dialog.
Example:

MessageBox.Show( “Message”, ”Title”).
MessageBox.Show( String,String, MessageBoxButtons) It will display the message box with the supplied text, title and the corresponding buttons to be displayed on the Message Box.
For eg the below will display Yes and No buttons.

MessageBox.Show( "Message”, "Title", MessageBoxButtons.YesNo);
Show(String, String, MessageBoxButtons, MessageBoxIcon) It will display the message box with the supplied text, title and the corresponding buttons to be displayed on the Message Box. It will also display the icon that is specified before the text.
For eg the below will display Yes and No buttons with a question mark in front of message.

MessageBox.Show( "Message”, "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaulButton) It will display the message box with the supplied text, title and the corresponding buttons to be displayed on the Message Box. It will also display the icon that is specified before the text. The last parameter denotes which button must be selected by default on load.
For eg the below will display Yes and No buttons with a question mark in front of message.

MessageBox.Show( "Message”, "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
Show(String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaulButton, MessageBoxOptions) It will display the message box with the supplied text, title, and the corresponding buttons to be displayed on the Message Box. It will also display the icon that is specified before the text. The last parameter denotes which button must be selected by default on load and the contents of the messagebox will be right-aligned.
For eg the below will display Yes and No buttons with a question mark in front of message.

MessageBox.Show( "Message”, "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MesageBoxOptions.RightAlign, true);

Types of MessageBox Buttons

The following are the types of Buttons that are available in the MessageBox.Show() method. They are

  • OK: It is defined as MessageBoxButtons.OK
  • OK and Cancel: It is defined as MessageBoxButtons.OkCancel.
  • Abort Retry and Ignore: It is defined as MessageBoxButtons.AbortRetryIgnore.
  • Yes No and Cancel: It is defined as MessageBoxButtons.YesNoCancel.
  • Yes and No: It is defined as MessageBoxButtons.YesNo.
  • Retry and Cancel: It is defined as MessageBoxButtons.RetryCancel.

Types of MessageBox Icons

The following are the types of MessageBox icons method are:

  • None: No icons are displayed in the Message box.
  • Hand: A hand icon is displayed. It is defined as MessageBoxIcon.Hand.
  • Question: A question mark is displayed. It is defined as MessageBoxIcon.Question.
  • Exclamation: An exclamation mark is displayed. It is defined as MessageBoxIcon.Exclamation.
  • Asterisk: An asterisk symbol is displayed. It is defined as MessageBoxIcon.Asterisk.
  • Stop: A stop icon is displayed. It is defined as MessageBoxIcon.Stop.
  • Error: An error icon is displayed. It is defined as MessageBoxIcon.Error.
  • Warning: A warning icon is displayed. It is defined as MessageBoxIcon.Warning.
  • Information: An info symbol is displayed. It is defined as MessageBoxIcon.Information.

Types of MessageBox Options

The following are the various Message Box options that are available.

  • ServiceNotification: It is defined as MessageBoxOptions.ServiceNotification. This is used to display the message box on the current desktop which is active. The message box is displayed even when no user is logged on to the desktop.
  • DefaultDesktopOnly: It is defined as MessageBoxOptions.DefaultDesktopOnly. This also displays on the currently active desktop. The difference between this and service notification is that here the message is displayed on the interactive window.
  • RightAlign: It is defined as MessageBoxOptions.RightAlign. This is used to format the message in right alignment.
  • RtlReading: It is defined as MessageBoxOptions.RtlReading. This denotes that message is displayed from right to left order.

Example of C# MessageBox

Following are the examples of c# message box are:

Input:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace test
{
public partial class testform : Form
{
public testform()
{
InitializeComponent();
}
private void testform_Load(object sender, EventArgs e)
{
MessageBox.Show("Demo of MsgBox");
MessageBox.Show("Demo of MsgBox", "Title");
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNo);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.OkCancel);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.RetryCancel);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.OK);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.AbortRetryIgnore);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Hand);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Exclamation);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Asterisk);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Stop);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Error);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning);MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Information);MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question,MessageBoxDefaultButton.Button2);
MessageBox.Show("Demo of Msgbox","Title",MessageBoxButtons.OK,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);
}
}
}

Output:

C# Message Box-1.1

C# Message Box-1.2

Conclusion – C# MessageBox

Thus, the article covered in detail about the Message box class in c# in detail. It explained about various message box show methods that are available, the various parameters of each method, and demonstrated that with an example. The article also covered in detail about various message box options, message box buttons, and message box icons in detail along with their use. To learn more in detail it is advisable to write sample programs and practice them.

Recommended Articles

This is a guide to C# MessageBox. Here we also discuss the introduction and types of show method along with an example and its code implementation. You may also have a look at the following articles to learn more –

  1. Assert in C#
  2. C# List vs Array
  3. ASP.NET CheckBox
  4. C# BinaryReader

Понравилась статья? Поделить с друзьями:
  • Вывод разного звука на два устройства одновременно windows 10
  • Вывод на несколько аудиоустройств windows 10
  • Выберите правильные типы квот в windows server 2008 r2
  • Выберите параметры конфиденциальности для этого устройства windows 10 что отключить
  • Выберите параметры конфиденциальности для этого устройства windows 10 при установке что