C# winform自定义控件

在winform开发中,有时候需要对原有控件进行修改,本文就textbox控件为例,增加不能复制、粘贴、剪切textbox文本框内的内容。详细介绍如何实现。

创建自定义控件

增加属性方法

csharp 复制代码
//注意继承父类对象,System.Windows.Forms.TextBox
 public partial class NoCopyPasteTextBox : System.Windows.Forms.TextBox
 { // 系统消息常量:剪贴板操作相关
     private const int WM_COPY = 0x0301;    // 复制
     private const int WM_CUT = 0x0300;     // 剪切
     private const int WM_PASTE = 0x0302;   // 粘贴

     protected override void WndProc(ref Message m)
     {
         // 拦截复制、剪切、粘贴的系统消息
         if (m.Msg == WM_COPY || m.Msg == WM_CUT || m.Msg == WM_PASTE)
         {
             return; // 忽略消息,不执行默认操作
         }

         // 其他消息正常处理
         base.WndProc(ref m);
     }

     protected override void OnKeyDown(KeyEventArgs e)
     {
         // 拦截快捷键(双重保险)
         if ((e.Control && e.KeyCode == Keys.C) ||
             (e.Control && e.KeyCode == Keys.V) ||
             (e.Control && e.KeyCode == Keys.X))
         {
             e.Handled = true;
             e.SuppressKeyPress = true;
             return;
         }

         base.OnKeyDown(e);
     }

     public NoCopyPasteTextBox()
     {
         // 禁用右键菜单
         this.ContextMenu = new ContextMenu();
     }
 }

调用控件

重新编译后,在控件栏就可以看到自定义的控件,然后执行拖拉

相关推荐
AI行业学习6 分钟前
2026 版 Notepad++ 完整图文安装指南|官方渠道无捆绑,一键切换中文界面
开发语言·人工智能·python·html·notepad++
鹏易灵19 分钟前
C++——7.类与对象,掌握封装、继承、多态.详解
开发语言·c++·算法
水无痕simon21 分钟前
5 多表操作
java·开发语言·数据库
初阳78522 分钟前
【Qt】系统相关(2)——文件
开发语言·qt
大P哥阿豪24 分钟前
Go panic & recover:深入Go语言的异常拯救之道
开发语言·后端·golang·go
Ricky_Theseus1 小时前
Trie 字典树:前缀匹配利器
开发语言·c#
cui_ruicheng1 小时前
Python从入门到实战(三):流程控制与循环语句
开发语言·python
zh_xuan1 小时前
c++ std::Any 用法
开发语言·c++·any
小杍随笔1 小时前
【Rust全栈项目接入UUID主键实战:从选型到PostgreSQL适配(含v7优化)】
开发语言·postgresql·rust
binbin_521 小时前
Flutter 调用鸿蒙原生组件:MethodChannel 与 PlatformView 的选择和落地
开发语言·深度学习·flutter·harmonyos