Member 12747680 Ответов: 2

Проблема с сообщением об исключении, в котором не отображается кнопка справки в исключении.


Всем привет,

У меня есть проблема с созданием пользовательского контролируемого окна сообщения об ошибке в WPF.
Чтобы реализовать это, я подумал об использовании окна сообщения об исключениях, которое предоставляется Microsoft,
Я сослался на этот блог
https://www.codeproject.com/Articles/18838/Exception-Message-Box-Using-C
и реализовали то же самое в проекте его работа но дело в том что кнопка справки которая находится на окне сообщения не отображается или свойства необходимые для ее выставления в пользовательском интерфейсе недоступны,

Любое предложение по этому поводу было бы полезно.
Заранее спасибо.

Что я уже пробовал:

Окно Сообщения Об Исключении С Использованием C#[^]

то же самое реализовали и в нашем проекте.

2 Ответов

Рейтинг:
4

Richard Deeming

Это не просто, но вы можете это сделать.

Если вы используете любой из конструкторов, которые принимают string содержащее сообщение об ошибке для отображения, вы можете установить HelpLink собственность ExceptionMessageBox чтобы указать ссылку справки. Вы все еще можете использовать InnerException свойство для отображения полной информации о фактическом исключении.

var message = new ExceptionMessageBox("Something went wrong...")
{
    HelpLink = "https://www.google.com/",
    InnerException = ex,
};

message.Show(this);


Если вы используете любой из конструкторов, которые принимают Exception, этот HelpLink на ExceptionMessageBox игнорируется. Вместо этого видимость кнопки справки определяется тем, есть ли какие-либо исключения в цепочке. Свойство HelpLink[^] набор. Похоже, что большинство исключений не имеют этого поля, поэтому кнопка "справка" редко появляется. Однако это свойство можно записать, поэтому вы можете установить его:
var error = new InvalidOperationException("Something went wrong...", ex)
{
    HelpLink = "https://www.google.com/",
};

var message = new ExceptionMessageBox(error);
message.Show(this);

(Технически ссылка справки для исключения также может быть построена из элементов в свойство Data[^] - HelpLink.BaseHelpUrl указывает базовый URL-адрес и любую запись, ключ которой начинается с HelpLink. будет добавлено как строковое значение запроса.)


Member 12747680

Большое вам спасибо, вы сделали мой день лучше.

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

и еще один вопрос при нажатии кнопки help Как обрабатывать события, например при нажатии кнопки help или кнопки copy мы хотим написать свой собственный метод, который выполняет определенные действия, как это сделать?

Richard Deeming

Там есть OnCopyToClipboard событие, с которым вы можете справиться, чтобы справиться с кнопкой копирования.

При нажатии кнопки справки событие не срабатывает.

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

Member 12747680

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

еще раз благодарю вас .

Member 12747680

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

Richard Deeming

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

Member 12747680

как изменить или отключить кнопку копирования, если она не требуется.? спасибо.

Richard Deeming

Существует не вариант, чтобы сделать это. Если это требование, вам придется создать свою собственную форму.

Member 12747680

Эй, извините, у меня есть еще один вопрос для того же самого ,что они дали возможность добавить некоторые кнопки для окна сообщения, если мы нажмем на эти кнопки, как мы узнаем, что мы нажали эту кнопку, означает, как мы можем получить доступ к событию buttton click.например: button1, если мы нажмем, что какое-то событие или действие должно произойти. как я могу это сделать?

Richard Deeming

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

Вы можете указать до пяти кнопок с пользовательским текстом, каждая из которых закроет окно сообщения перед возвращением к вашему коду. Там нет события "щелчок по кнопке"; вместо этого вы ждете Show метод возврата, а затем проверьте CustomDialogResult свойство, чтобы увидеть, какая кнопка была нажата.

Если вам нужно что-то более сложное, то вам придется создать свою собственную форму.

Member 12747680

Большое спасибо. очень приятно видеть ваши ответы. еще раз спасибо.!

Рейтинг:
0

Afzaal Ahmad Zeeshan

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

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

Что же касается "не показывания", то оно когда-нибудь показывается или работает? Возможно, или кнопка может быть скрыта. :смеяться: