Winform窗體縮放下使用剪切板功能出現(xiàn)頁面閃動(dòng)解決分析
問題
Winform窗體,在首次使用剪切板功能時(shí)會(huì)出現(xiàn)頁面閃動(dòng)。
原因
使用了PresentionCore.dll里的Clipboard導(dǎo)致的,具體原因未知
解決
使用其他方法進(jìn)行剪切板功能,比如WindowAPI,F(xiàn)orms的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窗體縮放下使用剪切板功能出現(xiàn)頁面閃動(dòng)解決分析的詳細(xì)內(nèi)容,更多關(guān)于Winform窗體縮放的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#多線程學(xué)習(xí)之(四)使用線程池進(jìn)行多線程的自動(dòng)管理
這篇文章主要介紹了C#多線程學(xué)習(xí)之使用線程池進(jìn)行多線程的自動(dòng)管理,實(shí)例分析了C#中線程池的概念與相關(guān)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C#使用whisper.net實(shí)現(xiàn)語音識(shí)別功能
這篇文章主要為大家詳細(xì)介紹了C#如何使用whisper.net實(shí)現(xiàn)語音識(shí)別功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2023-11-11
c# 實(shí)現(xiàn)窗體拖到屏幕邊緣自動(dòng)隱藏
讓窗體拖到屏幕邊緣自動(dòng)隱藏的原理,通過Form1_LocationChanged的方法,當(dāng)窗體位置發(fā)生改變時(shí),判斷其是否在屏幕邊緣,在則隱藏。再通過Timer控件經(jīng)過指定時(shí)間判斷出鼠標(biāo)的位置,若鼠標(biāo)在屏幕左邊、上邊或右邊,這根據(jù)窗體的位置,調(diào)出窗體。2009-02-02
C#中判斷本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)的方法
C#中一般通過InternetGetConnectedState函數(shù)返回本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài),下面簡單介紹下,需要的朋友可以參考下2013-10-10
如何使用C#修改本地Windows系統(tǒng)時(shí)間
這篇文章主要介紹了如何使用C#修改本地Windows系統(tǒng)時(shí)間,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01
C#實(shí)現(xiàn)合并多個(gè)word文檔的方法
這篇文章主要介紹了C#實(shí)現(xiàn)合并多個(gè)word文檔的方法,是C#針對(duì)Word文檔操作的一個(gè)非常重要的技巧,需要的朋友可以參考下2014-09-09

