处理UserControl上的剪贴板副本

TcK*_*cKs 2 .net c# vb.net clipboard winforms

我有复杂的UserControl(网格,网格的编辑控件等等),我想要处理CTRL + C键盘快捷键,但我不想通过编辑控件(文本框,组合框等等)禁用本机功能. .如果CTRL + C没有被其他内部控件处理,我想自己处理它(从网格中复制整行等等).

我尝试在UserControl中覆盖WndProc方法并检查WM_COPY和WM_COPYDATA,但它不起作用.它仅适用于最终目标控件(例如TextBox).

Han*_*ant 5

您可以通过重写ProcessCmdKey()来完成此操作.检查文本框是否具有焦点.例如:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == (Keys.Control | Keys.C)) {
            var box = this.ActiveControl as TextBoxBase;
            if (box == null) {
                // Do your stuff
                MessageBox.Show("Copy!");
                return true;
            }
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
Run Code Online (Sandbox Code Playgroud)