Quando faccio clic su un pulsante su un modulo Windows Forms, vorrei aprire una finestra del Blocco note che contiene il testo da un controllo TextBox sul modulo.Come aprire il testo in Blocco note da .NET?
Come posso farlo?
Quando faccio clic su un pulsante su un modulo Windows Forms, vorrei aprire una finestra del Blocco note che contiene il testo da un controllo TextBox sul modulo.Come aprire il testo in Blocco note da .NET?
Come posso farlo?
Prova questo fuori:
System.IO.File.WriteAllText(@"C:\test.txt", textBox.Text);
System.Diagnostics.Process.Start(@"C:\test.txt");
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");
Grazie mille per la risposta. :) –
@Shredder: non capisco la tua domanda. Quando il file è aperto nel blocco note, verrà bloccato. – Oded
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? –
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):
Questo è un modo molto più pulito di fare cose. Non lascia i dati inutili sul disco. – Oybek
@kmatyaszek Sembra che i link di riferimento siano corretti, o forse il sito è inattivo? Ti dispiacerebbe aggiornarli, se possibile? –
@Shredder il sito pinvoke.net è online ma ho aggiunto anche riferimenti al sito msdn. – kmatyaszek
Sì, non forzare Blocco note su un utente che ha il proprio editor di testo preferito. –
Ho ricevuto risposta da voi. Grazie. :) –
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. –