c# выберите текст из messagebox.показать всплывающее окно
Я искал в google и stackoverflow уже 2 часа. Должно быть что-то, что я просто упускаю из виду. Есть ли простой способ сделать текст выбираемым в messagebox? Прямо сейчас, когда я звоню в почтовый ящик.Show() Я не могу скопировать отображаемый текст. А почему бы и нет? как бы я настроил текст, чтобы его можно было скопировать?
Мой код:
//catch all exceptions
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//throw;
}
Я хочу иметь возможность выбрать сообщение об ошибке, которое выходит, чтобы пользователь мог отправить его мне, и я могу устранить их проблему. Какой-нибудь помощь очень ценится.
EDIT: нельзя использовать метод crtl-C. Мои пользователи не в состоянии понять эту концепцию. Нужно выделить с помощью мыши и щелкните правой кнопкой мыши, чтобы выбрать опцию. Спасибо!
EDIT: для справки то, что я в конечном итоге сделал, - это использование смеси ответов. Я создал всплывающее окно с одной кнопкой и по действию кнопки скопировал в буфер обмена. Это не идеально, но с правильным ярлыком он работает достаточно хорошо на данный момент. Спасибо вам всем за то, что предложения!
//catch all exceptions
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
MessageBoxButtons buttons = MessageBoxButtons.OK;
DialogResult result;
// Displays the MessageBox.
result = MessageBox.Show(ex.Message + "nnClick OK button to copy to clipboard", "Error", buttons);
if (result == System.Windows.Forms.DialogResult.OK)
{
Clipboard.SetText(ex.Message);
//throw;
}
}
6 ответов:
Если пользователь нажимает
Ctrl-C
, когда MessageBox имеет фокус, сообщение, заголовок MessageBox и метки MessageBoxButtons копируются в буфер обмена.Edit: Вы можете выводить сообщения в текстовый файл и отправлять их вам по электронной почте ? чтобы все было проще, вы можете поместить файл на их рабочий стол
Я бы скопировал текст вашего MessageBox в буфер обмена после или до того, как пользователь закроет MessageBox, используя следующий код:
var msg = "Hello world!"; MessageBox.Show(msg); Clipboard.SetText(msg);
Это должно быть достаточно легко для ваших пользователей, чтобы понять.
Во всех производственных системах, над которыми я когда-либо работал, мы создаем пользовательский диалог, который имеет дружественное сообщение пользователя с кнопкой для отправки сообщения об ошибке, трассировки стека, снимка экрана и системной информации по электронной почте поддержки.
Насколько я знаю, этот вопрос задавался много раз, и единственное решение, которое я нашел, если вы можете выбрать окно сообщения, скопировать его (он получит копию), а затем вы можете вставить его, и он вставит содержимое в чем-то вроде хорошего формата...
По умолчанию стандартное окно сообщения не имеет возможности выбрать текст..
Из этого сообщения - скопируйте текст из MessageBox/Msgbox ...
Вы можете использовать Ctrl-C для копирования сообщения из messagebox.
И из как разрешить копирование сообщения в MessageBox, вы не можете программно получить доступ к тексту в окне сообщений ОС Windows по умолчанию. Для этого вам понадобится пользовательский контроль.
MessageBox является окном и имеет окно, поэтому вы можете использовать Windows api функции, чтобы найти их. Посмотрите на эти импортные товары:
[DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", SetLastError = true)] static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
Обратите внимание, что если вы даете вашему MessageBox название, это позволяет использовать FindWindow, чтобы найти его. Передача дескриптора, возвращенного в FindWindowEx, позволяет найти его дочернее окно, а GetWindowText позволит вам прочитать этот текст. Атрибуция Источника
Но разве вы уже не знаете содержание сообщения? Ты вроде как должен был бы, чтобы ... покажите его, верно?