2011-09-30 14 views

cevap

35

bu deneyin:

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

Evet, kendi tercih edilen metin düzenleyicisine sahip bir kullanıcı üzerinde Not Defteri'ni zorlamayın. –

+0

Senden cevap aldım. Teşekkürler. :) –

+1

Birden fazla kullanıldıysa, dosya kendi üzerine yazılacak, bu yüzden çöp birikmesine yol açan yeni kopyalar yapmaya devam etmeyecektir. Bir sistem geçici klasöründe yolu yapın. –

6

kaydet File.WriteAllText kullanarak diske dosya:

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

Sonra not defteri açmak için Process.Start kullanın:

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

Cevabınız için çok teşekkür ederim. :) –

+0

@Shredder - Sorunu anlamıyorum. Dosya not defterinde açık olduğunda, kilitlenecektir. – Oded

+0

Cevabınızı böyle yazdığımda. string s = txtNum.Text; Process.Start ("notepad.exe", s); Bu metin sadece başlık görünür. Not Defteri'nde açılmaz. Yanlış mıyım? –

32

Değilsin Bu dizeyle dosya oluşturmaya ihtiyacım var. Sorununuzu çözmek için P/Invoke'u kullanabilirsiniz. NotepadHelper sınıfı

Kullanım:

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

NotepadHelper sınıf kodu:

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

Kaynaklar (pinvoke.net ve msdn.microsoft.com):

SetWindowText: pinvoke | msdn

FindWindowEx: pinvoke | msdn

SendMessage: pinvoke | msdn

+2

Bu, işleri yapmanın çok daha temiz bir yoludur. Diskte çöp verisi bırakmaz. – Oybek

+0

@kmatyaszek Referans bağlantılarınızın bozuk gibi görünüyor, ya da belki site kapalı? Mümkünse bunları güncellemeyi ister misiniz? –

+0

@Shredder site pinvoke.net yayında ama msdn sitesine de referanslar ekledim. – kmatyaszek

İlgili konular