2011-09-30 16 views
17

जब मैं Windows Forms फ़ॉर्म पर एक बटन क्लिक करता हूं, तो मैं फ़ॉर्म पर टेक्स्टबॉक्स नियंत्रण से टेक्स्ट युक्त नोटपैड विंडो खोलना चाहता हूं।.NET से नोटपैड में टेक्स्ट कैसे खोलें?

मैं यह कैसे कर सकता हूं?

उत्तर

35

इस आजमाएं:

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

हां, उस उपयोगकर्ता पर नोटपैड को मजबूर न करें जिसके पास अपना पसंदीदा टेक्स्ट संपादक है। –

+0

मुझे आपके पास जवाब मिला। धन्यवाद। :) –

+1

यदि एक से अधिक बार उपयोग किया जाता है, तो फ़ाइल स्वयं को ओवरराइट कर देगी, इसलिए ऐसा नहीं है कि यह नई प्रतियां कचरा बनाने के लिए अग्रणी बनायेगा। एक सिस्टम अस्थायी फ़ोल्डर में पथ बनाओ। –

6

सहेजें File.WriteAllText का उपयोग कर डिस्क पर फ़ाइल:

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

फिर Process.Start का उपयोग नोटपैड में खोलने के लिए:

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

धन्यवाद आपके उत्तर के लिए आपका बहुत बहुत धन्यवाद। :) –

+0

@Shredder - मैं आपके प्रश्न को समझ नहीं पा रहा हूं। जब नोटपैड में फ़ाइल खुलती है, तो इसे लॉक कर दिया जाएगा। – Oded

+0

जब मैंने आपका उत्तर लिखा था। स्ट्रिंग एस = txtNum.Text; प्रक्रिया। स्टार्ट ("notepad.exe", एस); वह पाठ केवल हेडर दिखाई देता है। नोटपैड में खुला नहीं है। क्या मैं गलत हूँ? –

32

आप नहीं करते इस स्ट्रिंग के साथ फाइल बनाने की जरूरत है। आप अपनी समस्या का समाधान करने के लिए P/Invoke का उपयोग कर सकते हैं।

NotepadHelper वर्ग के उपयोग:

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

NotepadHelper वर्ग कोड:

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

संदर्भ (pinvoke.net और msdn.microsoft.com):

SetWindowText: pinvoke | msdn

FindWindowEx: pinvoke | msdn

SendMessage: pinvoke | msdn

+2

यह सामान करने का कहीं अधिक स्वच्छ तरीका है। डिस्क पर कचरा डेटा नहीं छोड़ता है। – Oybek

+0

@kmatyaszek ऐसा लगता है जैसे आपके संदर्भ लिंक टूटे हैं, या शायद साइट नीचे है? यदि आप संभव हो तो उन्हें अद्यतन करना चाहते हैं? –

+0

@ साइट श्रेडर साइट pinvoke.net ऑनलाइन है लेकिन मैंने msdn साइट पर भी संदर्भ जोड़े। – kmatyaszek

संबंधित मुद्दे