有人知道当用户权限在文本框中单击并单击粘贴时会触发什么事件吗?我正在try 捕获粘贴,这样我就可以模拟当用户通过输入从文本框激发TextChanged事件时发生的事情.

推荐答案

正如JIMI提到的,您可以使用简单的定制将PasteDetected事件添加到TextBox,并(如果您 Select )拦截它以防止粘贴发生.

class TextBoxEx : TextBox
{
    const int WM_PASTE = 0x0302;
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_PASTE:
                var e = new PasteDetectedEventArgs();
                PasteDetected?.Invoke(this, e);
                if (e.Cancel)
                {
                    m.Result = (IntPtr)1;
                    return;
                }
                break;
            default:
                break;
        }
        base.WndProc(ref m);
    }
    public event EventHandler<PasteDetectedEventArgs> PasteDetected;
}

public class PasteDetectedEventArgs : EventArgs
{
    public bool Cancel { get; set; }
}

一旦检测到,你只需判断Clipboard看看内容是什么(如果这是你关心的事情).

intercept paste

public MainForm()
{
    InitializeComponent();

    textBox.PasteDetected += (sender, e) =>
    {
        e.Cancel = true;    // Disallow the paste.

        // Putting the cancel option in the event argument carries a risk, so
        // do 'not' do anything in this handler that would block WndProc!!!
        BeginInvoke(()=>MessageBox.Show(Clipboard.GetText(), "Paste Detected"));
    };

This WORKS for context menu paste.

Csharp相关问答推荐

ß != ss与ICU进行不区分大小写的比较

在命令行中使用时安装,但在单击时不会安装

ASP.NET Core:如何在IPageFilter中注入ApplicationDbContext

AsNoTrackingWithIdentitySolutions()似乎不起作用?

可为空的泛型属性

C#EF Core 8.0表现与预期不符

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

发布用于Linux Ubuntu的C#应用程序

如何在WPF的树视图中显示一个对象的两个或多个属性,其中只有一个是分层项?

当前的文化决定了错误的文化

Automapper 12.x将GUID映射到字符串

如何在我的C#应用程序中设置带有reactjs前端的SignalR服务器?

.NET:从XPath定位原始XML文档中的 node

如何使用用于VS代码的.NET Maui扩展在我的iOS/Android设备或模拟器上进行调试?

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

C#使用相同内存的多个数组

映射器-如何映射到多个实体

如何在特定时间间隔运行多个后台任务?

在C#中删除多个不同名称的会话

CsvHelper在第二次迭代时抛出System.ObjectDisposedException