打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
复制粘贴DataGridView不再乱码-直接粘贴(转)

复制粘贴DataGridView不再乱码System.Windows.Forms.DataGridView控件以数据网络的方法呈现数据,可以非常方便的用它绑定数据源,不需要编辑多少代码就可以实现对数据源的增删改功能。偶然发现它有一个小小的问题,我们用快捷键复制(Ctrl+C/Ctrl+Insert)表格内容后,到常用的办公处理软件(如微软Office系列和Sun的OpenOffice)中粘贴,那么带有Unicode字符的内容会显示会乱码。使用反射工具查看了DataGridView控件对此功能的实现方法,是由于它直接采用了剪贴版类的SetDataObject方法而没有指定其格式,那么它的格式似乎被认为是ANSI的HTML格式+Unicode内容,所以直接粘贴到字处理软件或者表格处理软件(有时,微软Excel会因此无响应)显示出汉字等Unicode字符却成了乱码。

Clipboard.SetDataObject(clipboardContent);

此种情况可以利用“选择性粘贴”将其格式按“无格式文本”粘贴就可以了。

总不要是这样子,我们还可以编写一个DataGridView子类,重写ProcessDataGridViewKey方法,当它在处理“复制”的快捷键时用我们重新实现的ProcessInsertKey来完成任务,将复制剪贴板功能改为Unicode格式的SetText方法即可。代码如下(修改的剪贴板功能在29行):

public class MyDataGridView : DataGridView  
{  
     [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]  
    protected override bool ProcessDataGridViewKey(KeyEventArgs e)  
     {  
        switch (e.KeyCode)  
         {  
            case Keys.Insert:  
            case Keys.C:  
                return this.ProcessInsertKey(e.KeyData);  
            default:  
                break;  
         }  
        return base.ProcessDataGridViewKey(e);  
     }  
 
     [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]  
    protected new bool ProcessInsertKey(Keys keyData)  
     {  
        if ((((keyData & (Keys.Alt | Keys.Control | Keys.Shift)) == Keys.Control) ||  
             (((keyData & (Keys.Alt | Keys.Control | Keys.Shift)) == (Keys.Control | Keys.Shift))  
             && ((keyData & Keys.KeyCode) == Keys.C)))  
             && (this.ClipboardCopyMode != DataGridViewClipboardCopyMode.Disable))  
         {  
             DataObject clipboardContent = this.GetClipboardContent();  
            if (clipboardContent != null)  
             {  
                //Clipboard.SetDataObject(clipboardContent);  
                 Clipboard.SetText(clipboardContent.GetData(DataFormats.UnicodeText).ToString());  
                return true;  
             }  
         }  
        return false;  
     }  
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Visual C# 2005实现控件中捕获按键
C#利用KeyPress和KeyDown事件拦截键盘输入及组合键
C# 完美实现DataGridView批量复制多行/单元格数据并粘贴功能
delphi ide unicode 字符乱码
支持回车换行的DataGridView | CAD工具之家
DataGridView消息与DataGridViewColumn消息
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服