Winform窗体缩放下使用剪切板功能出现页面闪动解决分析
更新时间:2023年11月02日 11:02:29 作者:点墨
这篇文章主要介绍了Winform窗体缩放下使用剪切板功能出现页面闪动解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
问题
Winform窗体,在首次使用剪切板功能时会出现页面闪动。
原因
使用了PresentionCore.dll里的Clipboard导致的,具体原因未知
解决
使用其他方法进行剪切板功能,比如WindowAPI,Forms的Clipboard
演示代码
MyClipboard.cs
using System; using System.Runtime.InteropServices; namespace WindowsFormsApp2 { class MyClipboard { [DllImport("User32")] public static extern bool OpenClipboard(IntPtr hWndNewOwner); [DllImport("User32")] public static extern bool CloseClipboard(); [DllImport("User32")] public static extern bool EmptyClipboard(); [DllImport("User32")] public static extern bool IsClipboardFormatAvailable(int format); [DllImport("User32")] public static extern IntPtr GetClipboardData(int uFormat); [DllImport("User32", CharSet = CharSet.Unicode)] public static extern IntPtr SetClipboardData(int uFormat, IntPtr hMem); public static void FormsCopy() { System.Windows.Forms.Clipboard.SetDataObject("Forms"); } public static void PresentationCoreCopy() { System.Windows.Clipboard.SetDataObject("PresentationCore"); } public static void Win32Copy() { if (!OpenClipboard(IntPtr.Zero)) { return; } EmptyClipboard(); SetClipboardData(13, Marshal.StringToHGlobalUni("Win32")); CloseClipboard(); } } }
Form1.cs
using System; using System.Collections; using System.Collections.Concurrent; using System.Configuration; using System.IO; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressions; using System.Diagnostics; using System.Drawing; using System.Threading; namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.WindowState = FormWindowState.Normal; } private void button1_Click(object sender, EventArgs e) { MyClipboard.FormsCopy(); } private void button2_Click(object sender, EventArgs e) { MyClipboard.PresentationCoreCopy(); } private void button1_Click_1(object sender, EventArgs e) { MyClipboard.Win32Copy(); } } }
演示效果
以上就是Winform窗体缩放下使用剪切板功能出现页面闪动解决分析的详细内容,更多关于Winform窗体缩放的资料请关注脚本之家其它相关文章!
相关文章
VS.net VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路
在VSS上把项目的Bin和Obj目录删除,然后重新取出项目,编译成功。2009-06-06
最新评论