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 21

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 позволит вам прочитать этот текст. Атрибуция Источника

Но разве вы уже не знаете содержание сообщения? Ты вроде как должен был бы, чтобы ... покажите его, верно?