yes visual resultado personalizados personalizado information error ejemplos botones c# text messagebox noncopyable

visual - c#seleccionar texto de messagebox.show emergente



messagebox.show c# ejemplos (6)

He estado buscando en google y stackoverflow por 2 horas ahora. Tiene que haber algo que simplemente estoy pasando por alto. ¿Hay una manera fácil de hacer que el texto sea seleccionable en un buzón de mensajes? A partir de este momento, cuando llamo a MessageBox.Show () no puedo copiar el texto que se muestra. Por qué no? ¿Cómo puedo configurar el texto para poder copiarlo?

mi código:

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

Quiero poder seleccionar el mensaje de error que aparece para que un usuario me lo pueda enviar y yo pueda solucionar su problema. Cualquier ayuda es muy apreciada.

EDITAR: No se puede utilizar el método crtl-c. Mis usuarios no pueden captar ese concepto. Necesito resaltar con el mouse y hacer click derecho para seleccionar la opción ¡Gracias!

EDITAR: Para referencia, lo que terminé haciendo es usar una mezcla de respuestas. Creé una ventana emergente con un solo botón y luego de la acción del botón copié en el portapapeles. No es perfecto, pero con la etiqueta correcta funciona bien por ahora. ¡Gracias por todas las sugerencias!

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


Copiaría el texto de su MessageBox en el portapapeles antes o antes de que el usuario cierre el MessageBox usando un código como este:

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

Esto debería ser lo suficientemente fácil para que sus usuarios lo entiendan.



El MessageBox es una ventana y tiene una ventana, por lo que puede usar las funciones de la API de Windows para encontrarlas. Mira estas importaciones:

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

Tenga en cuenta que si le da un título a su MessageBox, es posible usar FindWindow para encontrarlo. Pasar el identificador devuelto a FindWindowEx le permite encontrar su ventana secundaria y GetWindowText le permitiría leer ese texto. Atribución de fuente

¿Pero no tienes ya el contenido del mensaje? Tendrías que hacerlo para mostrarlo, ¿verdad?


En todos los sistemas de producción en los que he trabajado, creamos un diálogo personalizado que tiene un mensaje de usuario amigable con un botón para enviar por correo electrónico el mensaje de error, el seguimiento de la pila, una captura de pantalla y la información del sistema al correo electrónico de soporte.


Hasta donde sé, se me ha pedido mucho tiempo, y la única solución que encontré es que puede seleccionar el cuadro de mensaje, copiarlo (se copiará), y luego puede pegarlo y pegarlo. Los contenidos en algo así como un buen formato ...

De forma predeterminada, el cuadro de mensaje estándar no tiene forma de seleccionar el texto.


Si un usuario presiona Ctrl-C mientras el MessageBox tiene el foco, el mensaje, el título de MessageBox y las etiquetas de MessageBoxButtons se copian en el portapapeles.

Editar: ¿Podría enviar los mensajes a un archivo de texto y recibirlos por correo electrónico? Para facilitar las cosas, puedes poner el archivo en su escritorio.