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

相关文章

  • UGUI绘制动态曲线

    UGUI绘制动态曲线

    这篇文章主要为大家详细介绍了UGUI绘制动态曲线的具体方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • C# WinForm自动更新程序之文件上传操作详解

    C# WinForm自动更新程序之文件上传操作详解

    这篇文章主要为大家详细介绍了C# WinForm自动更新程序中文件上传操作,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2022-10-10
  • C#编程实现带有Aero效果的窗体示例

    C#编程实现带有Aero效果的窗体示例

    这篇文章主要介绍了C#编程实现带有Aero效果的窗体,涉及C#调用动态链接库针对窗体属性的相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • WPF实现绘制统计图(柱状图)的方法详解

    WPF实现绘制统计图(柱状图)的方法详解

    这篇文章主要为大家详细介绍了如何基于WPF实现实现统计图(柱状图)的绘制,文中的示例代码简洁易懂,对我们学习WPF有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • C#为控件添加自定义事件及自定义触发

    C#为控件添加自定义事件及自定义触发

    C#本身提供了很强大的控件库,但是很多控件库的功能只是一些基本的功能,本文主要介绍了C#为控件添加自定义事件及自定义触发,具有一定的参考价值,感兴趣的可以了解一下
    2022-04-04
  • c#字符串去掉空格的二种方法(去掉两端空格)

    c#字符串去掉空格的二种方法(去掉两端空格)

    本文主要介绍了字符串去掉两端空格,并且将字符串中多个空格替换成一个空格的方法,需要的朋友可以参考下
    2014-02-02
  • c#使用filesystemwatcher监视文件系统的变化

    c#使用filesystemwatcher监视文件系统的变化

    对于一个文件夹的改变,C#这边有自己的类来实现,我们不需要关心它的内部实现机制,不需要关心它底层调用哪些API,我们只需要关心如何去调用它,如何让它帮助我们记录文件夹的修改情况即可,下面我们就实现它
    2014-01-01
  • c#委托把方法当成参数(实例讲解)

    c#委托把方法当成参数(实例讲解)

    本篇文章主要是对c#委托把方法当成参数的实例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • 使用C#实现一个简单的绘图工具

    使用C#实现一个简单的绘图工具

    这篇文章主要为大家详细介绍了如何使用C#开发的简单绘图工具,可以将签名简单绘图后的效果以图片的形式导出,有需要的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • C#值类型、引用类型中的Equals和==的区别浅析

    C#值类型、引用类型中的Equals和==的区别浅析

    这篇文章主要介绍了C#值类型、引用类型中的Equals和==的区别浅析,本文分别对C#值类型和引用类型中的Equals和==做了讲解和给出了实例,需要的朋友可以参考下
    2015-01-01

最新评论