.Net 标准控件与自定义控件 转自:http://www.souzz.net 博客园

转载 2006年05月19日 15:58:00

最近在csdn上讨论textbox的防拷贝。
一般得出的结论是可以重写Form的ProcessCmdKey 方法。

代码如下:

        protected override bool ProcessCmdKey(ref Message msg,Keys keyData)  
        

 
            
if(keyData == (Keys.Control | Keys.C)||keyData ==(Keys.Control | Keys.V))
            
{
                MessageBox.Show(
"不能粘贴,复制");
                
return true;
            }

 
            
else 
                    
return base.ProcessCmdKey(ref msg, keyData); 
//            return false;
 
        }
 


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代码如下:

 

public class NoCopyTextBox :System.Windows.Forms.TextBox
    
{
        ContextMenu noContext 
=new ContextMenu();
    
        
public NoCopyTextBox()
        
{
            
this.ContextMenu =noContext;
        }


        
private void InitializeComponent()
        
{
        }


        
protected override bool ProcessCmdKey(ref Message msg,Keys keyData)  
        

 
            
if(keyData == (Keys.Control | Keys.C)||keyData ==(Keys.Control | Keys.V))
            
{
                MessageBox.Show(
"不能粘贴,复制");
                
return true;
            }

 
            
else 
                
return base.ProcessCmdKey(ref msg, keyData); 
            
//            return false;
 
        }
 
    }

该控件在构造的时候用一个空contextmenu代替了默认contextmeun,这样,右键点击便什么也出不来了。

所以我想说的是,实际上可以在实际开发中,在以有标准控件的基础上去创造细节不同的控件。这可能比直接使用标准控件麻烦,但总算比重头开始制造控件来的轻松多了:)

所以应用派的程序员还是应该有自己的一套库比较好。

相关文章推荐

在ASP.NET中动态加载内容 用户控件和模板(转http://www.da8848.cn/article/jiaocheng/NET/3838.html)

在ASP.NET中动态加载内容(用户组件和模板)要点:1. 使用Page.ParseControl2. 使用base.LoadControl第一部分:加载模板 下面是一个模板“<td width=70...

网页设计师的 12 款免费的 Firefox 4 插件(转自:http://www.oschina.net/news/20761/12-best-free-firefox-4-add-ons-for)

Firefox 4 正式版发布没多久,怎么感觉这个版本老了呢?因为现在都 Firefox 7 Beta 了,唉。本文介绍 10 款 Firefox 4 的插件,适合网页设计师使用的包括调试、测试和开发...

决对有用 asp.net 自定义验证码控件

1:新建一个画验证码的类 如: using System; using System.Drawing; /// ///CheckCodeHelper 的摘要说明 /// p...

ASP.NET自定义控件开发示例(一)

 本文通过实现一个服务端控件来讲解一下控件开发,该控件的功能如下: 1.显示服务端时间,并不停更新 2.通过手动点击刷新按钮以AJAX获取服务端最新时间 3.能拖动 4.能记住在页...

转Asp.net 用户控件添加自定义事件

转Asp.net 用户控件添加自定义事件 对于用户控件的使用有这样的特点。就是,当我们要求一个用户控件要实现特定的功能的时候,他可以在整个网站里面的页面上任意拖拽。但是,他的功能相对固定,也就是说在...

理解Asp.Net自定义控件的生命周期

大家在平时学习Asp.Net进行web开发时,为了满足项目需要,将开发大量满足需求的自定义控件。那关于自定义控件的生命周期如何呢,与页面生命周期有何区别呢?我今天跟大家详细解释一下:控件生命周期大概有...

asp.net用户自定义控件的方法

.ascx代码如下:

[Ext.Net] 1.2.0_在程序集中自定义 TreePanel 控件

本文内容 概述 演示在程序集中自定义 TreePanel 控件 运行结果   概述 之前,我在博文 Ext.Net_在 Web 应用程序中自定义 TreePanel 控件 中,演示如...

基于.net平台的自定义绘制波形控件

VS自定义绘制波形控件,该控件具有拖拽坐标轴功能、放大缩小功能、鼠标移动坐标点功能

ASP.NET 部署和使用自定义 Web 服务器控件

本演练演示如何创建和测试自定义 ASP.NET Web 服务器控件。 在本演练中,您将学会如何执行以下任务: 创建一个 ASP.NET Web 服务器控件。 通过向该控件添加元数据来...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)