c # выберите текст из всплывающего окна messagebox.show - PullRequest
22 голосов
/ 20 октября 2011

Я искал в Google и stackoverflow в течение 2 часов. Должно быть что-то, что я просто пропускаю. Есть ли простой способ сделать текст выбираемым в окне сообщения? На данный момент, когда я вызываю MessageBox.Show (), я не могу скопировать отображаемый текст. Почему бы и нет? как бы установить текст для копирования?

мой код:

//catch all exceptions
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            //throw;
        }

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

РЕДАКТИРОВАТЬ: не может использовать метод crtl-c. Мои пользователи не могут понять эту концепцию. Нужно выделить мышью и щелкнуть правой кнопкой мыши, чтобы выбрать вариант. СПАСИБО!

РЕДАКТИРОВАТЬ: Для справки, я закончил, используя смесь ответов. Я создал всплывающее окно с одной кнопкой, и после действия кнопки я скопировал в буфер обмена. Это не идеально, но с правильной этикеткой это работает достаточно хорошо на данный момент. Спасибо всем за предложения!

//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;

                }

            }

Ответы [ 6 ]

32 голосов
/ 20 октября 2011

Если пользователь нажимает Ctrl-C, когда у MessageBox есть фокус, сообщение, заголовок MessageBox и метки MessageBoxButtons копируются в буфер обмена.

Редактировать: Можно вывестисообщения в текстовый файл, и они отправили его вам по электронной почте?чтобы упростить задачу, вы можете поместить файл на рабочий стол

7 голосов
/ 20 октября 2011

На всех производственных системах, над которыми я когда-либо работал, мы создаем настраиваемое диалоговое окно, в котором есть понятное пользовательское сообщение с кнопкой для отправки сообщения об ошибке, трассировки стека, снимка экрана и информации о системе в службу поддержки. по электронной почте.

7 голосов
/ 20 октября 2011

Я бы скопировал текст вашего MessageBox в буфер обмена после или до того, как пользователь закроет MessageBox, используя такой код:

var msg = "Hello world!";
MessageBox.Show(msg);
Clipboard.SetText(msg);

Это должно быть достаточно просто для понимания пользователями.

1 голос
/ 11 августа 2016

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

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

1 голос
/ 20 октября 2011

Из этого поста - Копировать текст из MessageBox / Msgbox ...

Вы можете использовать Ctrl-C для копирования сообщения из ящика сообщений.

А из Как разрешить копирование сообщения в MessageBox , вы не можете программно получить доступ к тексту в окне сообщений Windows OS по умолчанию. Для этого вам понадобится пользовательский элемент управления.

1 голос
/ 20 октября 2011

Насколько я знаю, об этом спрашивали много раз, и единственное решение, которое я нашел, - это то, что вы можете выбрать окно сообщения, скопировать его (оно получит копию), а затем вы можете вставить его и он вставит содержимое в что-то вроде хорошего формата ...

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

...