C# 单剪贴板修复
我正在Visual Studio中开发一个应用程序,它可以在Windows和MAC(Mono framework 3.6.0)上运行。 MAC上有些问题似乎无法解决:C# 单剪贴板修复,c#,winforms,macos,mono,C#,Winforms,Macos,Mono,我正在Visual Studio中开发一个应用程序,它可以在Windows和MAC(Mono framework 3.6.0)上运行。 MAC上有些问题似乎无法解决: 复制/粘贴功能不起作用。我知道有人问: 但我不能在Winforms中使用NSPasteboard MAC上的应用程序GUI相当迟钝。我有一个TabControl,当我切换tab时,有时来自另一个tab的控件会保留下来,并通过其他tab控件混合。对于可部署应用程序来说,这非常糟糕。 报告了类似的错误: 这些问题是否有解决办法
谢谢为了防止其他人需要它,解决方案是使用pbcopy/pbpaste实现复制/粘贴。以下是一个可用于在OSX上复制/粘贴的帮助器类:
public class MacClipboard
{
/// <summary>
/// Copy on MAC OS X using pbcopy commandline
/// </summary>
/// <param name="textToCopy"></param>
public static void Copy(string textToCopy)
{
try
{
using (var p = new Process())
{
p.StartInfo = new ProcessStartInfo("pbcopy", "-pboard general -Prefer txt");
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = false;
p.StartInfo.RedirectStandardInput = true;
p.Start();
p.StandardInput.Write(textToCopy);
p.StandardInput.Close();
p.WaitForExit();
}
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
}
}
/// <summary>
/// Paste on MAC OS X using pbpaste commandline
/// </summary>
/// <returns></returns>
public static string Paste()
{
try
{
string pasteText;
using (var p = new Process())
{
p.StartInfo = new ProcessStartInfo("pbpaste", "-pboard general");
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
pasteText = p.StandardOutput.ReadToEnd();
p.WaitForExit();
}
return pasteText;
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
return null;
}
}
}
公共类Mac剪贴板
{
///
///使用pbcopy命令行在MAC OS X上复制
///
///
公共静态无效副本(字符串textToCopy)
{
尝试
{
使用(var p=new Process())
{
p、 StartInfo=newprocessstartinfo(“pbcopy”,“-pboard-general-preference txt”);
p、 StartInfo.UseShellExecute=false;
p、 StartInfo.RedirectStandardOutput=false;
p、 StartInfo.RedirectStandardInput=true;
p、 Start();
p、 标准输入。写入(文本复制);
p、 StandardInput.Close();
p、 WaitForExit();
}
}
捕获(例外情况除外)
{
Trace.WriteLine(例如消息);
}
}
///
///使用pbpaste命令行在MAC OS X上粘贴
///
///
公共静态字符串粘贴()
{
尝试
{
字符串粘贴文本;
使用(var p=new Process())
{
p、 StartInfo=新流程StartInfo(“pbpaste”、“-pboard general”);
p、 StartInfo.UseShellExecute=false;
p、 StartInfo.RedirectStandardOutput=true;
p、 Start();
pasteText=p.StandardOutput.ReadToEnd();
p、 WaitForExit();
}
返回粘贴文本;
}
捕获(例外情况除外)
{
Trace.WriteLine(例如消息);
返回null;
}
}
}
与xsel一样,MAC上不需要额外安装。您可以检查当前操作系统,然后选择要使用的方法。请参阅示例:好的,我已经在进行平台检查,但如何在Windows上使用VisualStudio上MonoMac的NSPasteboard。据我所知,该框架只能在安装了MonoDevelop和xcode的MAC上使用。