当我单击Windows Forms窗体上的按钮时,我希望打开一个记事本窗口,其中包含窗体上TextBox控件的文本。我该怎么做呢?
h7appiyu1#
你不需要用这个字符串创建文件。你可以用P/Invoke来解决你的问题。
NotepadHelper类的用法:
NotepadHelper.ShowMessage("My message...", "My Title");
NotepadHelper类代码:
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| msdn查找窗口Ex:pinvoke| msdn发送消息:pinvoke| msdn
6ss1mwsb2#
试试这个:
System.IO.File.WriteAllText(@"C:\test.txt", textBox.Text); System.Diagnostics.Process.Start(@"C:\test.txt");
v6ylcynt3#
使用File.WriteAllText将文件保存到磁盘:
File.WriteAllText
File.WriteAllText("path to text file", myTextBox.Text);
然后使用Process.Start在记事本中打开它:
Process.Start
Process.Start("path to notepad.exe", "path to text file");
uplii1fm4#
适用于非ASCII用户。
[DllImport("User32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Unicode)] private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
基于**@Peter Mortensen的回答将CharSet = CharSet.Unicode**添加到属性中以支持Unicode字符
ekqde3dh5#
我一直在使用NotepadHelper解决方案,直到我发现它在Windows 11上不起作用。将文件写入磁盘并使用默认文本编辑器启动似乎是最好的解决方案。这已经发布,但我发现您需要传递UseShellExecute=true。
System.IO.File.WriteAllText(path, value); System.Diagnostics.ProcessStartInfo psi = new() { FileName = path, UseShellExecute = true }; System.Diagnostics.Process.Start(psi);
我写入System.IO.Path.GetTempPath()文件夹,并在应用程序退出时运行一个清理程序--为应用程序使用的文件名搜索唯一的前缀模式。
string pattern = TempFilePrefix + "*.txt"; foreach (string f in Directory.EnumerateFiles(Path.GetTempPath(), pattern)) { File.Delete(f); }
5条答案
按热度按时间h7appiyu1#
你不需要用这个字符串创建文件。你可以用P/Invoke来解决你的问题。
NotepadHelper类的用法:
NotepadHelper
类代码:设置窗口文本:pinvoke| msdn
查找窗口Ex:pinvoke| msdn
发送消息:pinvoke| msdn
6ss1mwsb2#
试试这个:
v6ylcynt3#
使用
File.WriteAllText
将文件保存到磁盘:然后使用
Process.Start
在记事本中打开它:uplii1fm4#
适用于非ASCII用户。
基于**@Peter Mortensen的回答
将CharSet = CharSet.Unicode**添加到属性中以支持Unicode字符
ekqde3dh5#
我一直在使用NotepadHelper解决方案,直到我发现它在Windows 11上不起作用。将文件写入磁盘并使用默认文本编辑器启动似乎是最好的解决方案。这已经发布,但我发现您需要传递UseShellExecute=true。
我写入System.IO.Path.GetTempPath()文件夹,并在应用程序退出时运行一个清理程序--为应用程序使用的文件名搜索唯一的前缀模式。