c# sélectionnez le texte à partir de messagebox.afficher popup

j'ai cherché sur google et stackoverflow depuis 2 heures maintenant. Il y a quelque chose que je suis tout simplement dominant. Est-il un moyen facile de rendre le texte sélectionnable dans une messagebox? À partir de maintenant quand j'appelle une MessageBox.Show() je ne peux pas copier le texte affiché. Pourquoi pas? comment régler le texte pour pouvoir le copier?

mon code:

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

je veux pouvoir sélectionner le message d'erreur qui sort pour qu'un utilisateur puisse l'Envoyer à moi et je peux résoudre leur problème. Toute aide est grandement appréciée.

EDIT: ne peut pas utiliser la méthode crtl-C. Mes utilisateurs ne sont pas capables de saisir ce concept. Besoin de surligner avec la souris et le clic droit pour sélectionner l'option. Je vous remercie!

Modifier: pour référence ce que j'ai fini par faire est d'utiliser un mélange des réponses. J'ai créé une fenêtre popup avec un seul bouton et sur l'action de bouton j'ai copié sur le presse-papier. Son pas parfait, mais avec le droit étiquette il fonctionne assez bien pour l'instant. Merci à tous pour les suggestions!

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

                }

            }
21
demandé sur toosweetnitemare 2011-10-20 22:11:44

6 réponses

si un utilisateur appuie sur Ctrl-C alors que le MessageBox a la mise au point, le message, la légende de MessageBox et les étiquettes MessageBoxButtons sont copiés sur le bloc-notes.

Edit: Vous pourriez sortie les messages dans un fichier texte et d'avoir un email pour vous ? pour rendre les choses plus faciles, vous pourriez mettre le fichier sur leur bureau

30
répondu Nasreddine 2011-10-20 18:26:03

Je copierais le texte de votre MessageBox au bloc-notes après ou avant que l'utilisateur ferme le MessageBox en utilisant le code comme ceci:

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

cela devrait être assez facile à comprendre pour vos utilisateurs.

7
répondu Jay Riggs 2011-10-20 18:27:14

sur tous les systèmes de production sur lesquels j'ai travaillé, Nous créons un dialogue personnalisé qui a un message d'utilisateur amical avec un bouton pour envoyer le message d'erreur, la trace de pile, une capture d'écran, et les informations du système à l'e-mail de soutien.

6
répondu Greg ''Wildman'' Finzer 2011-10-20 18:27:29

autant Que je sache, Cela a demandé beaucoup de temps, et la seule solution que j'ai trouvé si que vous pouvez sélectionner la zone de message, de le copier (copie), et vous pouvez ensuite coller, et il va coller le contenu dans quelque chose comme un beau format...

par défaut, la boîte de message standard n'a aucun moyen de sélectionner le texte..

1
répondu gbianchi 2011-10-20 18:16:29

De ce post - Copier du Texte à partir MessageBox/Msgbox ...

vous pouvez utiliser Ctrl-C pour copier un message d'une boîte de messagerie.

et de comment autoriser la copie de message sur MessageBox , vous ne pouvez pas programmatically accéder au texte dans la zone de message par défaut de Windows OS. Vous aurez besoin d'un contrôle personnalisé.

1
répondu Yuck 2017-05-23 10:31:16

le MessageBox est une fenêtre et a une fenêtre, donc vous pouvez utiliser l'api windows fonctions pour les trouver. Regardez ces importations:

[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);

notez que si vous donnez un titre à votre MessageBox, il est possible d'utiliser FindWindow pour le trouver. Passer la poignée retournée dans FindWindowEx vous permet de trouver sa fenêtre enfant et GetWindowText vous permettrait de lire ce texte. Attribution De Source

Mais n'avez-vous pas déjà le contenu du message? Vous auriez, en quelque sorte, dans l'ordre d'affichage, à droite?

1
répondu Louis Nardozi 2016-08-11 15:27:27