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窗体缩放的资料请关注脚本之家其它相关文章!

相关文章

最新评论