以编程方式在C#2010中模拟RichTextBox的KeyDown事件

时间:2010-09-06 04:53:16

标签: c# events richtextbox

我的表单上有一个RichTextBox,我想使用RichTextBox的默认行为,例如,Ctrl + Z(撤消)或其他操作(Ctrl + Y,Ctrl + X,Ctrl + V)。

如果用户使用快捷键(Ctrl + Z),那就完美了。但是,如果用户单击ToolStripButton会怎么样?

如何在C#2010中以编程方式模拟RichTextBox的KeyDown事件。

以下是包含一些问题的代码段。你能帮我讲解如何在C#中模拟/提升事件吗?

private void tsbUndo_Click(object sender, EventArgs e)
{
    rtbxContent_KeyDown(rtbxContent, new KeyEventArgs(Keys.Control | Keys.Z));
}

private void tsbPaste_Click(object sender, EventArgs e)
{
    DoPaste();
}

private void DoPaste()
{
    rtbxContent.Paste(DataFormats.GetFormat(DataFormats.UnicodeText));
}

private void rtbxContent_KeyDown(object sender, KeyEventArgs e)
{
    //if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
    if (e.Control)
    {
        switch (e.KeyCode)
        {
            // I want my application use my user-defined behavior as DoPaste() does
            case Keys.V:
                DoPaste();
                e.SuppressKeyPress = true;
                break;

            // I want my application use the default behavior as the RichTextBox control does
            case Keys.A:
            case Keys.X:
            case Keys.C:
            case Keys.Z:
            case Keys.Y:
                e.SuppressKeyPress = false;
                break;

            default:
                e.SuppressKeyPress = true;
                break;
        }
    }
}

感谢。

2 个答案:

答案 0 :(得分:1)

RichTextBox有一个Undo方法,与 CTRL + Z 的方法相同。点击ToolStribButton即可拨打该号码。还有CopyPaste方法以及CanPaste方法,可用于启用/禁用与粘贴命令相对应的ToolStripButton

这样您就不需要模拟任何东西,而是调用产生行为的功能。毕竟,按键只是触发这种行为。

答案 1 :(得分:0)

是的,这实际上可以在不编写自定义RichTextBox的情况下完成。您可以使用SendKeys类来触发控件的关键事件,而不是在RichTextBox上调用Paste()方法

private void DoPaste()
{
    rtbxContent.Focus(); // You should check to make sure the Caret is in the right place
    SendKeys.Send("^V"); // ^ represents CTRL, V represents the 'V' key
}

这当然假设您的数据存储在剪贴板中。