Cuando hago clic en un botón en un formulario Windows Forms, me gustaría abrir una ventana del Bloc de notas que contiene el texto de un control TextBox en el formulario.¿Cómo abrir texto en el Bloc de notas desde .NET?
¿Cómo puedo hacer eso?
Cuando hago clic en un botón en un formulario Windows Forms, me gustaría abrir una ventana del Bloc de notas que contiene el texto de un control TextBox en el formulario.¿Cómo abrir texto en el Bloc de notas desde .NET?
¿Cómo puedo hacer eso?
Trate de hacer esto:
System.IO.File.WriteAllText(@"C:\test.txt", textBox.Text);
System.Diagnostics.Process.Start(@"C:\test.txt");
Guardar el archivo en disco utilizando File.WriteAllText
:
File.WriteAllText("path to text file", myTextBox.Text);
A continuación, utilice Process.Start
para abrirlo en el Bloc de notas:
Process.Start("path to notepad.exe", "path to text file");
Muchas gracias por su respuesta. :) –
@Shredder - No entiendo tu pregunta. Cuando el archivo está abierto en el bloc de notas, se bloqueará. – Oded
Cuando escribí tu respuesta así. cadena s = txtNum.Text; Process.Start ("notepad.exe", s); ese texto aparece solo header.not abierto en el bloc de notas. ¿Estoy equivocado? –
Usted no lo hace necesidad de crear un archivo con esta cadena. Puede usar P/Invoke para resolver su problema.
Uso de clase NotepadHelper:
NotepadHelper.ShowMessage("My message...", "My Title");
NotepadHelper
código de clase:
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace Notepad
{
public static class NotepadHelper
{
[DllImport("user32.dll", EntryPoint = "SetWindowText")]
private static extern int SetWindowText(IntPtr hWnd, string text);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
public static void ShowMessage(string message = null, string title = null)
{
Process notepad = Process.Start(new ProcessStartInfo("notepad.exe"));
if (notepad != null)
{
notepad.WaitForInputIdle();
if (!string.IsNullOrEmpty(title))
SetWindowText(notepad.MainWindowHandle, title);
if (!string.IsNullOrEmpty(message))
{
IntPtr child = FindWindowEx(notepad.MainWindowHandle, new IntPtr(0), "Edit", null);
SendMessage(child, 0x000C, 0, message);
}
}
}
}
}
Referencias (pinvoke.net y msdn.microsoft.com):
Esta es una forma mucho más limpia de hacer las cosas. No deja datos basura en el disco. – Oybek
@kmatyaszek Parece que sus enlaces de referencia están rotos, ¿o quizás el sitio está caído? ¿Te importaría actualizarlos, si es posible? –
@Shredder el sitio pinvoke.net está en línea pero también he agregado referencias al sitio msdn. – kmatyaszek
Sí, no fuerce el Bloc de notas en un usuario que tenga su propio editor de texto preferido. –
Recibí tu respuesta. Gracias. :) –
Si se usa más de una vez, el archivo se sobrescribirá a sí mismo, por lo que no es como si continuara haciendo nuevas copias que conduzcan a la acumulación de basura. Haga la ruta en una carpeta temporal del sistema. –