C#中的Clipboard与ContextMenuStrip应用举例

今天,突然想起了怎样在一个文本中实现复制、剪切与粘贴的功能,并给这些功能添加右键的快捷方式。于是,就用自己的VS2008写了一个简单的小应用,以熟悉C#中剪贴板与快捷菜单的使用。

首先,我们不难发现,剪贴板大致上有复制、粘贴和剪切三个功能。

复制,就是将选定的内容复制到内存当中;粘贴,则将内存中的数据写到所选中的区域或容器上,如文本区TextArea中,C#语言则往往是RichTextBox;剪切,可以把选定的内容复制到内存中,并清除掉这些选中的东西。

那么三个功能的实现我们可以大致这样定义:

复制:选中+存储

粘贴:选中+取出

剪切:选中+存储+清除

接着,我们可以考虑快捷菜单的设计,这种菜单属于弹出式菜单,点击鼠标右键可以将该菜单调出来。在C#中就是ContextMenuStrip,在Java中貌似叫PopedMenu。

最后将上述两者结合起来,制作一个包含了复制、粘贴和剪切功能的快捷菜单。按照一般软件的设计,当剪贴板中没有内容时,“粘贴”一项应该呈灰色,标识不可用。

用C#对上述内容进行实现,写了一个很简单的程序:

这时候,剪贴板上没有东西,所以“粘贴”一项不可用。

对内容进行复制、粘贴或剪切粘贴,则粘贴功能被激活:

给出部分程序代码,不当之处请大家指正。


    

/// <summary>
    
/// 剪贴板和快捷菜单示例
    
/// </summary>
    public partial class SampleClipBoard : Form
    {
        
/// <summary>
        
/// 构造方法
        
/// </summary>
        public SampleClipBoard()
        {
            InitializeComponent();
        }
        

 
/// <summary>
        
/// 复制编辑区上的一段文字到剪切板
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void tsmiCopy_Click(object sender, EventArgs e)
        {
            Clipboard.SetDataObject(richTextBox.SelectedText);
        }

        
/// <summary>
        
/// 粘贴一段文字到选定区域
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void tsmiPaste_Click(object sender, EventArgs e)
        {
            IDataObject data;
            data 
= Clipboard.GetDataObject();
            
//如果数据为文本,则使用其指定的RichTextBox文本
            if (data.GetDataPresent(DataFormats.Text))
            {
                richTextBox.SelectedText 
= data.GetData(DataFormats.Text).ToString();
            }
        }

        
/// <summary>
        
/// 将选定的内容剪切到剪贴板
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void tsmiCut_Click(object sender, EventArgs e)
        {
            Clipboard.SetDataObject(richTextBox.SelectedText);
            richTextBox.SelectedText 
= "";
        }

        
/// <summary>
        
/// 快捷菜单打开时的状态设定方法
        
/// <para>若剪贴板中内容为空,则粘贴选项失效。</para>
        
/// </summary>
        
/// <param name="sender"></param>
        
/// <param name="e"></param>
        private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
        {
            
if (!Clipboard.ContainsData(DataFormats.Text))
            {
                tsmiPaste.Enabled 
= false;
            }
            
else
            {
                tsmiPaste.Enabled 
= true;
            }
        }
    }

 

 

最后,还有一个值得注意的问题,那就是快捷菜单要显示出来,必须以某一容器为框架,也就是说,某个容器要能弹出菜单,则必须在其ContextMenuStrip一栏填上ContextMenuStrip类的对象名称。

例如这里的richTextBox中的ContextMenuStrip属性,选择了一个快捷菜单:

 

对于快捷菜单的更多内容,我们可以右击ContextMenuStrip的某个控件,选择当中的编辑项,编辑更多的属性。而进行C#开发时参考MSDN,则是十分重要。

转载于:https://www.cnblogs.com/jhxk/articles/2236242.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

控制台ui_设计下一代控制台UI

控制台ui游戏UX (GAMES UX) Yesterday’s Sony presentation showed us the final look of the PlayStation 5, as well as an impressive of next-gen games that will be released with it. What we didn’t get to see, however, is the new operating system and it’s use…

写给前端新手看的一些模块化知识

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信ruochuan12 进群参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。已进行三个月了&#xff0c;很多小伙伴表示收获颇丰。一、 为什么需要模块化以前没有模块化时…

代码实现照片素描_我的代码素描之旅

代码实现照片素描In 2018 I started the process of consistently creating and posting my code sketches online. These are small animations I make with code and post on instagram. Through these sketches I tried to visually express my ideas using color, animatio…

真效率神器,UI稿智能转换成前端代码,准确率极高

大家好&#xff0c;我是若川。在这充满网络促销活动的几个月&#xff0c;倍感压力的&#xff0c;除了你的口袋&#xff0c;是否还有程序员的发量呢&#xff1f;每年的双十一、双十二购物狂欢节&#xff0c;各大电商平台都会上线让消费者充满购买欲望的活动页面&#xff0c;而这…

几个用于序列化的代码片段

参考JavaScriptSerializer,一般用来做JSON格式化http://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer.aspx http://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptconverter.aspxDataContractSeria…

桌面图标摆放图案_用图标制作醒目的图案

桌面图标摆放图案Level up your video calls with a custom backdrop created using Noun Project icons.使用使用Noun Project图标创建的自定义背景来升级视频通话。 The only thing more visually pleasing than a well-designed icon is a neat, eye-catching pattern made…

3个多月,近3000人参与的源码共读,诚邀加入~

大家好&#xff0c;我是若川。众所周知&#xff0c;从8月份开始&#xff0c;我组织了源码共读活动&#xff0c;每周学习200行左右的源码&#xff0c;到现在持续了3个多月&#xff0c;坚持答疑解惑。帮助了不少人&#xff0c;还是挺开心的。另外&#xff0c;涌现了很多优秀的读者…

“这张图告诉你什么?”

For data to be impactful, it must be understood.为了使数据具有影响力&#xff0c;必须理解它。 I’ve happily spent hundreds and hundreds of hours of my life watching users misunderstand data visualizations. I’m strangely hooked on it.我快乐地度过了数百个小…

我们从 UmiJS 迁移到了 Vite

大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以点此加我微信ruochuan12 进群参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。已进行三个月了&#xff0c;很多小伙伴表示收获颇丰。我们从 UmiJS迁移到 Vite 已经上线半年…

将DataTable的内容以EXCEl的形式导出到本地

1.在搞项目的时候一般会遇到&#xff0c;将GridView或者Repeater的内容以Excel的形式保存到本地&#xff0c;即导出功能。我总结了两个方法。 方法一&#xff1a; 1 DataTable dt query.GetItems().GetDataTable();2 if (dt ! null)3 {4 …

智能家居数据库设计_设计更智能的数据表

智能家居数据库设计重点 (Top highlight)Data tables are hard. There are many different ways to think about them. So, naturally, the first step would be to figure out what your users need.数据表很难。 有许多不同的方式来考虑它们。 因此&#xff0c;自然地&#x…

可能是全网首个前端源码共读活动,诚邀你加入一起学习

大家好&#xff0c;我是若川。众所周知&#xff0c;从8月份开始&#xff0c;我组织了源码共读活动&#xff0c;每周学习200行左右的源码&#xff0c;到现在持续了3个多月&#xff0c;坚持答疑解惑。帮助了不少人&#xff0c;还是挺开心的。另外&#xff0c;涌现了很多优秀的读者…

线段树专辑——pku 3667 Hotel

http://poj.org/problem?id3667 哈哈&#xff0c;经典中的经典题啊。利用线段树求最大连续空闲区间&#xff0c;并返回空闲区间的起点坐标。 View Code 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 6 …

houseparty不流畅_重新设计Houseparty –用户体验案例研究

houseparty不流畅Houseparty has become very popular during the COVID-19 period because it helps you connect with others in a fun way. The concept is simple, you open the app and jump on a video call with your friends. You can even play online games with the…

你不知道的 Node.js 工具函数

从类型判断说起在 JavaScript 中&#xff0c;进行变量的类型校验是一个非常令人头疼的事&#xff0c;如果只是简单的使用 typeof 会到各种各样的问题。举几个简单的&#x1f330;&#xff1a;console.log(typeof null) // object console.log(typeof new Array) // object cons…

Java应用集群下的定时任务处理方案(mysql)

今天来说一个Java多机部署下定时任务的处理方案。 需求: 有两台服务器同时部署了同一套代码&#xff0c; 代码中写有spring自带的定时任务&#xff0c;但是每次执行定时任务时只需要一台机器去执行。 当拿到这个需求时我脑子中立马出现了两个简单的解决方案&#xff1a; 利用ip…

概念验证_设置成功的UX概念验证

概念验证用户体验/概念证明/第1部分 (USER EXPERIENCE / PROOF OF CONCEPT / PART 1) This is the first article of a four-part series. Please read Part 2 and Part 3.这是由四个部分组成的系列文章的第一篇。 请阅读 第2 部分 和 第3部分 。 How do today’s top UX desi…

从 vue3 和 vite 源码中,我学到了一行代码统一规范团队包管理器的神器

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动&#xff0c;感兴趣的可以加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。已进行四个月了&#xff0c;很多小伙伴表示收获颇丰。想学源码&#xff0c;极力推荐之前我写…

6个高效办公的Excel小技巧,学会让你高效办公

很多人在做Excel表格的时候&#xff0c;会出现下面这种情况&#xff1a;好不容易把内容都输入好了&#xff0c;才发现文字或是数字的排列组合需要重新调整&#xff0c;这个时候头就大了&#xff0c;到底是要一个个复制黏贴&#xff0c;还是要删除后再添加&#xff1f;不管哪种方…

unity 完美像素_像素完美

unity 完美像素从Kidpix到设计系统 (From Kidpix to design systems) Did you ever create stamps in KidPix? Kidpix is bitmap drawing software that’s been around since the nineties, and I remember many happy — more like maddening — hours creating tiny pixela…