最近在csdn上讨论textbox的防拷贝。一般得出的结论是可以重写Form的ProcessCmdKey 方法。代码如下:
ProcessCmdKey将截获Form的命令按键,并进行处理。该方法判断 用户是否按下了Ctrl+C和Ctrl+V按键组合。如果是,则弹出一个对话框,并返回真,这里返回了true,则表示我已经对该事件进行了处理,程序不需要继续对它做别的处理。否则,调用base.ProcessCmdKey继续对事件做处理。但是个人认为这样做有很大的问题。首先,这样做并不能从根本上解决TextBox防拷贝,因为当用户点击鼠标右键的时候,仍然可以激活标准的contextmeun .可以通过该弹出菜单轻松的完成拷贝。其次,ProcessCmdKey重载自From, 也就是说以该Form为容器的所有子控件上按键都将接受这个重灾方法的处理。举例来说,我想实现一个Form,其中有一个TextBox1,不能拷贝其上的数据。还有一个TextBox2允许用户粘贴拷贝,那么用这个方法就无法实现,不管是在哪个控件。程序都会无情地弹出一个MessageBox 告诉你不能拷贝。所以在Form中重载ProcessCmdKey不但实用价值不高,而且给人的感觉非常不好。。。所以更好的办法就是开发自定义控件。例如在这个应用中的TextBox, 完全可以开发一个NoCopyTextBox。该控件继承自TextBox.我们在该控件中重载ProcessCmdKey方法, 并替换掉NoCopyTextBox的默认contextmenu,这样就可以很好的解决上诉问题。而且在将来的开发中,遇到同样的问题,我们可以直接使用NoCopyTextBox对于那些不需要禁止Copy的TextBox使用标准控件就好。NoCopyTextBox代码如下:
posted on 2006-04-26 12:11 BearOcean 阅读(1829) 评论(8) 编辑 收藏 网摘 所属分类: .NET
Powered by: 博客园 Copyright © BearOcean