Подтвердить что ты не робот

С# выбрать текст из 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;

                }

            }
4b9b3361

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

Но разве у вас уже есть содержимое сообщения? Вы должны были бы это сделать, чтобы отобразить его, верно?