简单的解决方案:在 Click 事件中使用 SendKeys.Send() 调用。
SendKeys.Send("^X");
我正在做一些更复杂的事情,所以这里是详细信息:我正在制作几个表单,它们都共享一些自定义控件:MenuStrip、StatusStrip 和一些其他自定义控件。我决定让所有表单都从同一个基类继承,以允许共同实现很多东西。
public partial class CommonFormBase : Form
{
private void Initialize()
{
//Bind click event for custom MenuStrip to events in the local Form
CommonMenuStrip.Edit_Cut.Click += new EventHandler(Edit_Cut_Click);
CommonMenuStrip.Edit_Copy.Click += new EventHandler(Edit_Copy_Click);
CommonMenuStrip.Edit_Paste.Click += new EventHandler(Edit_Paste_Click);
}
//Implement Click events for the MenuStrip by calling local methods
internal void Edit_Cut_Click(object sender, EventArgs e) { Cut(); }
internal void Edit_Copy_Click(object sender, EventArgs e) { Copy(); }
internal void Edit_Paste_Click(object sender, EventArgs e) { Paste(); }
//Generic implementation of common commands for the CommonFormBase
public virtual void Cut() { SendKeys.Send("^X"); }
public virtual void Copy() { SendKeys.Send("^C"); }
public virtual void Paste() { SendKeys.Send("^V"); }
}
我在 Form 级别(不是 MenuStrip 级别)实现了 MenuStrip 的单击事件,但在那种情况下,我只调用了一个通用方法,它执行所有代码。在这个例子中,它是多余的,但我有其他 MenuStrip 命令会改变不同子窗体的功能,所以我认为让它们都工作相同会更容易。
无论如何,这几乎可以完美地工作!它似乎将快捷键激活的 MenuStrip_Click 事件推送到底层控件(或者可能是表单?),然后实现默认的快捷键事件。
它唯一做错的事情是它仅在您执行 Ctrl + V + V + V ... 或按住 Ctrl + V 时触发一次。不过,这只是触发器无法识别多个事件的问题,而不是解决方案本身的问题。