2011-09-30 19 views

Respuesta

35

Trate de hacer esto:

System.IO.File.WriteAllText(@"C:\test.txt", textBox.Text); 
System.Diagnostics.Process.Start(@"C:\test.txt"); 
+11

Sí, no fuerce el Bloc de notas en un usuario que tenga su propio editor de texto preferido. –

+0

Recibí tu respuesta. Gracias. :) –

+1

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. –

6

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"); 
+0

Muchas gracias por su respuesta. :) –

+0

@Shredder - No entiendo tu pregunta. Cuando el archivo está abierto en el bloc de notas, se bloqueará. – Oded

+0

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? –

32

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):

SetWindowText: pinvoke | msdn

FindWindowEx: pinvoke | msdn

EnviarMensaje: pinvoke | msdn

+2

Esta es una forma mucho más limpia de hacer las cosas. No deja datos basura en el disco. – Oybek

+0

@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? –

+0

@Shredder el sitio pinvoke.net está en línea pero también he agregado referencias al sitio msdn. – kmatyaszek

Cuestiones relacionadas