С# выбрать текст из messagebox.show popup
Я искал 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 + "\n\nClick OK button to copy to clipboard", "Error", buttons);
if (result == System.Windows.Forms.DialogResult.OK)
{
Clipboard.SetText(ex.Message);
//throw;
}
}
Ответы
Ответ 1
Если пользователь нажимает Ctrl-C
, в то время как MessageBox имеет фокус, сообщение, подпись MessageBox и метки MessageBoxButtons копируются в буфер обмена.
Изменить: Вы можете выводить сообщения в текстовый файл и отправлять их вам по электронной почте? чтобы сделать все проще, вы можете поместить файл на свой рабочий стол
Ответ 2
Я бы скопировал ваш текст MessageBox в буфер обмена после того, как пользователь закрыл MessageBox, используя следующий код:
var msg = "Hello world!";
MessageBox.Show(msg);
Clipboard.SetText(msg);
Это должно быть достаточно легко для понимания пользователями.
Ответ 3
На всех производственных системах, над которыми я когда-либо работал, мы создаем настраиваемое диалоговое окно с дружественным пользовательским сообщением с кнопкой, чтобы отправить сообщение об ошибке, трассировку стека, снимок экрана и системную информацию для поддержки электронная почта.
Ответ 4
Насколько мне известно, этому задали много времени и единственное решение, которое я нашел, если вы можете выбрать окно сообщения, скопировать его (он получит копию), а затем вы можете вставить его и он вставляет содержимое в нечто вроде приятного формата...
По умолчанию стандартное поле сообщения не имеет возможности выбрать текст.
Ответ 5
Из этого сообщения Скопировать текст из MessageBox/Msgbox...
вы можете использовать Ctrl-C для копирования сообщения из сообщения.
И из Как разрешить копирование сообщения в MessageBox, вы не можете программно получить доступ к тексту в окне сообщения ОС Windows по умолчанию. Для этого вам понадобится настраиваемый элемент управления.
Ответ 6
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 позволит вам прочитать этот текст.
Атрибуция источника
Но разве у вас уже есть содержимое сообщения? Вы должны были бы это сделать, чтобы отобразить его, верно?