C# 单剪贴板修复

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控件混合。对于可部署应用程序来说,这非常糟糕。 报告了类似的错误: 这些问题是否有解决办法

我正在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上使用。