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();
     }
 }

调用控件

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

相关推荐
石山代码6 分钟前
C++ 内存分区 堆区
java·开发语言·c++
无风听海25 分钟前
C# 隐式转换深度解析
java·开发语言·c#
LateFrames1 小时前
520 - 如何说晚安 (WPF)
c#·wpf·浪漫·ui体验
一只大袋鼠1 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
LuminousCPP2 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
魔法阵维护师2 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
web3.08889992 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python
один but you3 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
MY_TEUCK4 小时前
【Java 后端 | Nacos 注册中心】微服务治理原理、选型与注册发现实战
java·开发语言·微服务
测试员周周4 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest