2011-09-30 14 views

risposta

35

Prova questo fuori:

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

Sì, non forzare Blocco note su un utente che ha il proprio editor di testo preferito. –

+0

Ho ricevuto risposta da voi. Grazie. :) –

+1

Se usato più di una volta, il file verrà sovrascritto automaticamente, quindi non è così che continuerà a creare nuove copie che portano al garbage buildup. Crea il percorso in una cartella temporanea del sistema. –

6

Salva il file su disco utilizzando File.WriteAllText:

File.WriteAllText("path to text file", myTextBox.Text); 

Quindi utilizzare Process.Start per aprirlo in Blocco note:

Process.Start("path to notepad.exe", "path to text file"); 
+0

Grazie mille per la risposta. :) –

+0

@Shredder: non capisco la tua domanda. Quando il file è aperto nel blocco note, verrà bloccato. – Oded

+0

Quando ho scritto la tua risposta in questo modo. string s = txtNum.Text; Process.Start ("notepad.exe", s); quel testo appare solo header.non aperto nel blocco note. Ho sbagliato? –

32

Non lo sai è necessario creare un file con questa stringa. Puoi utilizzare P/Invoke per risolvere il tuo problema.

Uso di classe NotepadHelper:

NotepadHelper.ShowMessage("My message...", "My Title"); 

NotepadHelper codice della classe:

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

Riferimenti (pinvoke.net e msdn.microsoft.com):

SetWindowText: pinvoke | msdn

FindWindowEx: pinvoke | msdn

SendMessage: pinvoke | msdn

+2

Questo è un modo molto più pulito di fare cose. Non lascia i dati inutili sul disco. – Oybek

+0

@kmatyaszek Sembra che i link di riferimento siano corretti, o forse il sito è inattivo? Ti dispiacerebbe aggiornarli, se possibile? –

+0

@Shredder il sito pinvoke.net è online ma ho aggiunto anche riferimenti al sito msdn. – kmatyaszek

Problemi correlati