挂钩 WinForms TextBox 控件的默认“粘贴”事件

2024-01-05

我需要“修改”所有粘贴到 TextBox 中的文本,以便以某种结构化方式显示。我可以通过拖放、ctrl-v 来完成此操作,但是如何使用默认上下文的菜单“粘贴”来完成此操作?


虽然我通常不建议使用低级别的 Windows API,并且这可能不是唯一的方法,但它确实可以解决问题:

using System;
using System.Windows.Forms;

public class ClipboardEventArgs : EventArgs
{
    public string ClipboardText { get; set; }
    public ClipboardEventArgs(string clipboardText)
    {
        ClipboardText = clipboardText;
    }
}

class MyTextBox : TextBox
{
    public event EventHandler<ClipboardEventArgs> Pasted;

    private const int WM_PASTE = 0x0302;
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_PASTE)
        {
            var evt = Pasted;
            if (evt != null)
            {
                evt(this, new ClipboardEventArgs(Clipboard.GetText()));
                // don't let the base control handle the event again
                return;
            }
        }

        base.WndProc(ref m);
    }
}

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var tb = new MyTextBox();
        tb.Pasted += (sender, args) => MessageBox.Show("Pasted: " + args.ClipboardText);

        var form = new Form();
        form.Controls.Add(tb);

        Application.Run(form);
    }
}

归根结底,WinForms 工具包并不是很好。它是 Win32 和通用控件的一个薄包装。它公开了 80% 的最有用的 API。另外 20% 经常被遗漏或没有以明显的方式暴露出来。我建议如果可能的话,放弃 WinForms 并转向 WPF,因为 WPF 似乎是一个更好的 .NET GUI 架构框架。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

挂钩 WinForms TextBox 控件的默认“粘贴”事件 的相关文章

随机推荐

  • 在 C# 中创建不同的画笔图案

    我正在尝试做一些类似于绘画的东西 我想弄清楚如何制作不同的画笔样式 就像在 Paint 3D 中一样 使用钢笔工具与使用画笔工具时 您会得到一定的线条填充 我不知道从哪里开始 我一天中的大部分时间都在浏览文档并观看 YouTube 视频 我
  • DataTable服务器端处理添加编辑列

    我正在使用数据表 1 10 13 服务器端处理 我想添加一个带有编辑用户链接的 编辑 列 这个怎么做 我的js文件 userTable DataTable processing true serverSide true ajax type
  • 如何将Imageview放在其他布局后面

    我使用图像视图进行动画 这样它看起来就像从左到右的移动 但我的图像显示在其他视图的前面 以便用户能够单击图像 我正在尝试显示它behind另一种观点
  • 从 ROC 曲线获取阈值

    我有一些模型 使用ROCR将预测类百分比向量封装起来 我有一个性能对象 使用规格 tpr fpr 绘制性能对象可以得到一条 ROC 曲线 我正在比较特定误报率阈值 x 的模型 我希望从性能对象中获取真阳性率 y 的值 更重要的是 我想获得用
  • 在 ssh 模式下运行时在 vscode 中打开本地终端

    当我通过 ssh 连接到 vscode 中的远程计算机时 集成终端会在远程计算机中打开一个终端 有没有办法用本地计算机的终端打开终端面板 Using the command palette default ctrl shift p cmd
  • ASP.NET 成员资格保持身份验证问题

    因此 我的应用程序很奇怪 因为当您登录时 您将保持登录状态一两页 然后就迷路了 我的设置是这样的
  • C99 支持真的还没有广泛普及吗?

    我正在阅读 GNOME 项目的一些最佳实践 他们一直强调的一件事是避免 C99 功能 因为支持仍然不广泛 他们提到的一些功能包括单行注释和在块中间声明变量等功能 这让我想知道 C99 是否支持 即使是像这样的基本功能 评论 真的还没有广泛传
  • 如何在 JAVA 中使用 PDFBox 从 PDF 创建图像

    我想从 PDF 的第一页创建图像 我正在使用 PDFBox 在网上研究后 我发现了以下代码片段 public class ExtractImages public static void main String args ExtractIm
  • libpthread.so.0:添加符号时出错:命令行中缺少 DSO

    当我编译 openvswitch 1 5 0 时 遇到以下编译错误 gcc Wstrict prototypes Wall Wno sign compare Wpointer arith Wdeclaration after stateme
  • 从监听器访问对象

    假设我们有一些Foo包含的类 public void setOnSomethingListener OnSomethingListener listener 我们将其注册为 Foo foo new Foo foo setOnSomethin
  • 如何公开嵌入式 Flash 对象的 JavaScript 接口?

    JavaScript 和Flash Player 可以通过Flash 的ExternalInterface 机制交换数据 您注册希望能够从JavaScript 调用的ActionScript 函数 我的问题 如何找出 Flash 对象的哪些
  • Python:为什么我收到 AttributeError:__enter__

    我没有重新分配 open 关键字 但仍然收到此错误 有任何建议或方向来修复我的错误吗 with tempfile mkdtemp as test dir print test dir AttributeError enter 我也是Pyth
  • 只有变量可以通过引用传递 - php

    我正在尝试此代码 但出现此错误 Only variables can be passed by reference in xxx script class page function insert db of form arr i 0 fo
  • 如何用 Jest 模拟 Axios?

    我有一个函数client index js这是使用 axios 发出请求 import axios from axios const createRequest async url method gt const response awai
  • 从多线程获取单例实例的安全方法

    Method 1 DataCenter DataCenter getInstance static DataCenter instance return instance Method 2 DataCenter DataCenter get
  • 实体框架实体不在 DataSpace.OSpace (_workspace.GetItemCollection(DataSpace.OSpace)) 中,但在 DataSpace.CSpace 中

    我一直在闲逛XMLs 代表实体框架 我尝试创建一种可以在运行时注入属性的实体 首先我创建了DynamicEntity动态的物体 public class DynamicEntity DynamicObject Dictionary
  • 从 Java ArrayList 中删除而不进行迭代

    我正在做一项作业 但我找不到一种方法来使其正常工作 我有一个 ArrayList 其中包含 5 个学生的信息 我需要构造一个方法来删除其中一个对象 但我不需要 想要迭代 因为它是静态删除 我有以下代码 import java util Ar
  • UI线程既运行消息泵又执行代码?

    Winforms 中的 UI 线程负责通过调用来运行消息泵Application Run 我所说的消息泵是指不断从队列中拉出消息的无限循环 所以现在我的问题是 UI 线程如何在 ex 时也执行代码块 触发点击处理程序 它应该忙于消息泵 并且
  • Node.js、express、html 表单 req.body 未定义

    我不明白为什么 req body 未定义 它总是访问node js服务器 formstuff 中的函数 但req body未定义 当我查看结果时 它确实发布到了 cmd 我在任何地方都看不到我的查询 事实上 res query 和 res
  • 挂钩 WinForms TextBox 控件的默认“粘贴”事件

    我需要 修改 所有粘贴到 TextBox 中的文本 以便以某种结构化方式显示 我可以通过拖放 ctrl v 来完成此操作 但是如何使用默认上下文的菜单 粘贴 来完成此操作 虽然我通常不建议使用低级别的 Windows API 并且这可能不是